素数 学习笔记

一、素数的性质:

1.      合数必有素数因子。


2.      设p是素数且p|ab, 则必有p|a 或者 p|b.

3.      存在无穷多个素数

二、素数的分布

1.π(x):估计小于一个正实数x的素数的个数

素数定理:随着x的增长,

推论:令pn 是第n个素数,其中n是正整数,那么pn ~nln n.

 

2.对于任意正整数n,存在至少n个连续的合数。

证明:考虑: (n+1)!=(n+1)*n*…*2*1

则(n+1)!+2,(n+1)!+3,…,(n+1)!+(n+1) 都是合数,它们分别是2,3,…,n+1的倍数。

三、素数的猜想

1. 伯特兰猜想

         伯特兰-切比雪夫定理说明:伯特兰切比雪夫定理说明:若整数n > 3,则至少存在一个质数p,符合n < p < 2n − 2。另一个稍弱说法是:对于所有大于1的整数n,存在一个质数p,符合n < p < 2n

2.孪生素数猜想

         存在无穷多的形如p和p+2的素数对。

3.哥德巴赫猜想

每个大于2的正偶数可以写成两个素数的和。

4.      n2+1猜想

存在无穷多个形如n2+1的素数,其中n是正整数。

 

 

### C++ 素数算法学习教程 #### 判断单个数是否为素数 对于判断一个单独的整数 `n` 是否为素数,可以采用较为简单的试除法。这种方法的时间复杂度大约为 O(n√n),适用于较小规模的数据测试。 ```cpp bool isPrime(int n){ if (n <= 1) return false; if (n == 2) return true; for (int i = 2; i * i <= n; ++i){ if (n % i == 0){ return false; } } return true; } ``` 此方法通过遍历从2到根号下n之间的所有整数来检查是否存在能被n整除的情况[^2]。 #### 使用埃拉托斯特尼筛法求解一定范围内的全部素数 当需要找出某个区间内所有的素数时,则推荐使用更高效的埃拉托斯特尼筛法(Eratosthenes Sieve)。该算法能够一次性标记掉非素数,并保留下来的即为所求素数列表。 ```cpp #include <vector> using namespace std; void sieveOfEratosthenes(vector<int>& primes, int maxVal){ vector<bool> prime(maxVal + 1, true); for (int p = 2; p * p <= maxVal; ++p){ if (prime[p]){ for (int i = p * p; i <= maxVal; i += p) prime[i] = false; } } for (int p = 2; p <= maxVal; ++p){ if (prime[p]) primes.push_back(p); } } ``` 上述实现中定义了一个布尔类型的数组用于记录各个数值的状态;初始状态下假设每一个数字都是质数,在迭代过程中逐步排除那些已经被确认不是质数的位置。 #### 更多资源链接 为了深入理解这些概念以及获取更多实践练习的机会,建议访问专门针对C/C++编程语言设计的教学平台或博客文章集合。例如有一个包含超过六百篇关于这两种语言特性和技巧介绍的文章合集可供参考[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值