数论——质数模板

1.1.质数

1.1.1判定质数

#include <iostream>
#include <algorithm>

using namespace std;

bool is_prime(int x)
{
   if (x < 2) return false;
   for (int i = 2; i <= x / i; i ++ )
       if (x % i == 0)
           return false;
   return true;
}

int main()
{
   int n;
   cin >> n;

   while (n -- )
  {
       int x;
       cin >> x;
       if (is_prime(x)) puts("Yes");
       else puts("No");
  }

   return 0;
}

 

1.2分解质因数

#include <iostream>
#include <algorithm>

using namespace std;

void divide(int x)
{
   for (int i = 2; i <= x / i; i ++ )
       if (x % i == 0)
      {
           int s = 0;
           while (x % i == 0) x /= i, s ++ ;
           cout << i << ' ' << s << endl;
      }
   if (x > 1) cout << x << ' ' << 1 << endl;
   cout << endl;
}

int main()
{
   int n;
   cin >> n;
   while (n -- )
  {
       int x;
       cin >> x;
       divide(x);
  }

   return 0;
}

 

1.3线性筛质数

// C++ Version
void init() {
 for (int i = 2; i < MAXN; ++i) {
   if (!vis[i]) {
     pri[cnt++] = i;
  }
   for (int j = 0; j < cnt; ++j) {
     if (1ll * i * pri[j] >= MAXN) break;
     vis[i * pri[j]] = 1;
     if (i % pri[j] == 0) {
       // i % pri[j] == 0
       // 换言之,i 之前被 pri[j] 筛过了
       // 由于 pri 里面质数是从小到大的,所以 i 乘上其他的质数的结果一定也是
       // pri[j] 的倍数 它们都被筛过了,就不需要再筛了,所以这里直接 break
       // 掉就好了
       break;
    }
  }
}
}
 
posted @   YRJQD  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示