C++ 玩转素数(前方高能哦)
以下均为多组输入:
1. 判断一个数是否为素数,是则输出YES,不是则输出NO
源代码:
#include <iostream>#include <cmath>using namespace std;int main(){ int i,n; int flag; while(cin>>n) { if(n<=0 || n==1) //负数、0和1都不是素数 cout<<"NO"<<endl; else { flag=0; for(i=2;i<n;i++) { if(n%i==0) { flag++; break; } } if(flag==0) { cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } } } return 0;}
程序截图:
2. 求m和n之间的素数(输出个数和具体的素数,包含m和n,mn均为正整数)
源代码:
#include <iostream>#include <cmath>using namespace std;int main(){ int i,j,k; int m,n; int a[1000],t; //存素数 int x; //每x个换一行 while(cin>>m>>n) { cin>>x; t=0; //存素数数组初始下标赋值0 for(i=m;i<=n;i++) { k=sqrt(i); for(j=2;j<=k;j++) { if(i%j==0) { break; } } if(j>=k+1) { a[t]=i; t++; } } cout<<m<<"和"<<n<<"之间的素数个数为:"<<t<<endl; for(i=0;i<t;i++) { if((i+1)%x==0) cout<<a[i]<<endl; else cout<<a[i]<<" "; } cout<<endl; } return 0;}
程序截图:
3. 输入k(k为正整数且k<=10000),求出第k个素数
源代码:
#include <iostream>#include <cmath>using namespace std;int main(){ int i,j,k; int flag; int a[15000],t; //存素数 int kk; //第kk个 while(cin>>kk) { t=0; //存素数数组初始下标赋值0 for(i=2;i<=110000;i++) { k=sqrt(i); for(j=2;j<=k;j++) { if(i%j==0) { flag++; break; } } if(j>=k+1) { a[t]=i; t++; } } cout<<a[kk-1]<<endl; } return 0;}
程序截图:
4. 求m和n之间的回文素数(输出个数和具体的素数,包含m和n)
源代码:
#include <iostream>#include <cmath>using namespace std;int main(){ int i,j,k; int m,n; int a[1000],t; //存素数 int b[1000],tt; //存回文素数 int x; //每x个换一行 int turn; int originali; while(cin>>m>>n) { cin>>x; t=0,tt=0; //两数组初始下标赋值0 for(i=m;i<=n;i++) { k=sqrt(i); for(j=2;j<=k;j++) { if(i%j==0) { break; } } if(j>=k+1) { a[t]=i; t++; } } for(i=0;i<t;i++) { turn=0; originali=a[i]; while(a[i]!=0) { turn=turn*10+a[i]%10; a[i]/=10; } if(turn==originali) { b[tt]=originali; tt++; } } cout<<m<<"到"<<n<<"之间的回文素数数目为:"<<tt<<endl; for(i=0;i<tt;i++) { if((i+1)%x==0) cout<<b[i]<<endl; else cout<<b[i]<<" "; } cout<<endl; } return 0;}
程序截图: