关于素数分布密度的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,结果如下:
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,结果如下:
相关文章推荐
- 山东理工大学ACM平台题答案关于C语言 1137 C/C++经典程序训练7---求某个范围内的所有素数
- 读了两本关于C++程序性能优化的书
- 关于求素数 一列小程序
- 关于c语言变量的内存分布测试程序
- C/C++的程序占用的内存分布
- C++关于学生成绩管理方面的程序
- 关于 QtCreartor编写纯C++程序调用不到C++某些标准库和枚举以及运行错误 的解决方法
- 关于c++中程序的时间显示
- 关于c++检测内存泄露相关知识(windows程序调试)
- 1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
- 【c++程序】关于operator
- 关于Linux下C/C++程序编译
- C/C++程序启动后内存分布
- 关于C++编译的程序无法在新一台电脑上运行总结
- 关于C++程序编译出现error C2143: syntax error : missing ';' before 'type'的解决办法
- 关于C++程序编译出现error C2143: syntax error : missing ';' before 'type'的解决办法
- 关于Linux下C/C++程序编译
- C++关于运算符重载的程序报错error…
- 关于素数 的c程序
- 关于c++检测内存泄露相关知识(windows程序调试)