您的位置:首页 > 编程语言 > C语言/C++

关于素数分布密度的C++程序

2011-11-01 10:27 267 查看
有关素数的定理:

1. 任意一个数都可以表示成素数连乘积的形式,并且表示形式唯一。

2. 推论:如果素数p是成绩ab的因子,则p是a的因子,或者p是b的因子。

3. 任意等差数列都包含无限多素数。

4. 素数分布定理:设前n个自然数中含有an个素数,则(an/n)/(1/lnn)的极限为1.

对于前三个定理,有空的时候给出具体的证明,而第四个定理要用数学证明是比较困难的,所以就像能不能编一个程序来观察素数分布密度的规律呢?于是有如下的代码:

C++代码,编译环境VC++6.0:

#include<iostream>
#include<string>
using namespace std;
//判断一个数是不是素数,是的话返回ture,否则返回false;
bool isPrime(long data){
long i=0;
for(i=2;i<=data/2;i++){
if(data%i==0)
break;
}
if(i<=data/2){
return false;
}
else{
return true;
}
}
//前n个自然数中素数的个数,以及“素数密度”;
void countPrime(long n){
long a=0,cnt=0;
double density=0.0;
for(a=2;a<=n;a++){
if(isPrime(a)){
cnt++;
}
}
density=(double)cnt/double(n);
cout<<n<<"\t"<<cnt<<"\t"<<density<<endl;
}
int main(){
long n=10;
for(n=10;n<10^10;n*=10){
countPrime(n);
}
return 0;
}考虑到要计算的整数n会非常大,因而选择长整型,防止计算溢出,然而计算的结果超出了我的想象,这个程序运行了一个下午,也就勉强运算到10^6,结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ c