ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

质数

2020-11-05 14:03:20  阅读:128  来源: 互联网

标签:筛法 int 质数 枚举 include 定理


  1. 算术基本定理(唯一分解定理):
    任何一个大于1的正整数都能唯一分解有限个质数的乘积。
    \(p={\prod {p_1}^i{p_2}^j{p_3}^k…{p_n}^x}\)
    其中 \(p_1,p_2,p_3……p_n\)均为质数

  2. 质数分布定理:

  3. 对正实数\(x\),定义\(π(x)=x|in(x)\)为不大于\(x\)的质数个数

质数的判定:就是判定

质数的筛选:

普通筛法,枚举从\(1\)~\(n\)枚举每一个数,然后\(check(i)\),然后你就发现,你很傻逼

\(Eratosthnes\)筛法:
基本思想:质数的倍数一定不是质数
实现方法:用一个长度为\(N+1\)的数组保存信息(\(0\)表示质数,1)表示不是质数,先假设全部都为质数,然后枚举每一个数,去扫描它的倍数,最后没有被标记的就是质数了(除了\(1\),\(1\)要进行一下特判)
代码:

```
#include <iostream>
#include <cstring>
#define N 1000005
using namespace std;

int b[N];//数字对应表

main()
{
    int n;
    while( cin >> n )//输入查找上限
    {
        memset( b, 1 ,sizeof(b) );//下标对应数字为素数则为1,否则为0,全部初始化为1
        b[0] = 0; b[1] = 0;// 0、1不是素数
        for( int i(0); i*i <= n; i++ )// 遍历不大于n的所有数
            if ( b[i] )//如果这个数为素数
                for( int j = 2*i; j <= n; j += i )// 此时i为找到的一个素数,所有 i的倍数都不是素数
                    b[j] = 0;
        for( int i(0); i < n; i++ )
            if(  b[i] )
                cout << i <<"\t";
    }
}

```

标签:筛法,int,质数,枚举,include,定理
来源: https://www.cnblogs.com/abc123efg456-a1b2/p/13931314.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有