素数
素数的枚举
比较小数目的素数的枚举
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int t;
for(int prime_number_n=2;prime_number_n<=30;prime_number_n++){
t=1;
for(int i=2;i<=sqrt(prime_number_n);i++){
if(prime_number_n%i)
continue;
t=0;
break;
}
if(t){
cout<<prime_number_n<<" ";
}
}
return 0;
}
素数1
虽然看起来没有什么的,但是数输入的过大就会爆掉,原则上可以计算1亿的平方个素数。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
static int prime_number[1000000]={一亿以内的素数};
unsigned int prime_number_n;
int t;
for(;;){
t=1;
cout<<"输入一个数(最好大于一个亿):";
cin>>prime_number_n;
for(int i=1;i<=sqrt(prime_number_n);i++){
if(prime_number_n%prime_number[i])
continue;
t=0;
break;
}
if(t){
cout<<prime_number_n<<"是素数"<<endl;
}
else{
cout<<prime_number_n<<"是合数"<<endl;
}
}
return 0;
}
原理就是你如果你在你开方内的所有素数都不能整除你,那么你就是素数。
素数2
#include <iostream>
#include <cmath>
#include<algorithm> //数组赋值用
using namespace std;
int main(){
static int prime_number[1000000]={一亿以内的素数};
unsigned int prime_number_n[5];
int t,n,q[100];
for(;;){
t=1;
cout<<"输入一个数(最好19位以上)(采用固定的输入方式)";
cin>>n;
for(int i=0;i<=n;i++){
cin>>prime_number_n[i];
}
//prime_number_n[0]*q[0]+prime_number_n[1]*q[1]*pow(19)
fill(q,q+n,1);
for(int i=1;i<sqrt(prime_number_n[0]*q[0]+prime_number_n[1]*q[1]*10000000000000000000);i++){
if((prime_number_n[0]*q[0]+prime_number_n[1]*q[1]*10000000000000000000)%prime_number[i])
continue;
t=0;
break;
}
if(t){
cout<<prime_number_n[0]*q[0]+prime_number_n[1]*q[1]*10000000000000000000<<"可能是素数"<<endl;
}
else{
cout<<prime_number_n[0]*q[0]+prime_number_n[1]*q[1]*10000000000000000000<<"是合数"<<endl;
}
}
return 0;
}
//18446744073709551615
//18383936655797518335
我采用数组拼接的方式,当然,我没有使用高精度的算法,致使我这个还是存在一定的问题。
素数3
#include <iostream>
#include <cmath>
#include <fstream> //文件储存读取
using namespace std;
int main(){
static int prime_number[1000000];
unsigned int prime_number_n;
int t;
ifstream prime_number_form("素数表.txt",ios::in);
if(!prime_number_form)
{cerr<<"打开错误"<<endl;
exit(1);
}
for(int i=0;i<100000000;i++){
prime_number_form>>prime_number[i];
}
for(int i,prime_number_n=100000000;prime_number_n<=1000000000;prime_number_n++){
t=1;
for(i=1;i<=sqrt(prime_number_n);i++){
if(prime_number_n%prime_number[i])
continue;
else{
t=0;
break;
}
}
if(t)
prime_number[i]=prime_number_n;
}
ofstream prime_number_form_0("素数表.txt",ios::out);
for(int i=0;i<1000000000;i++){
prime_number_form_0<<prime_number[i];
}
return 0;
}
当然我也思考过采用文件读取的方式,显然,也不是很理想。1亿以内的数据太过于多了。
1亿以内的素数在我的文件分享里面有。