作者有话说:本篇共8道题,从易到难的顺序,都是较为常见的题目类型,后续还会补充有关素数(质数)的有关练习题。
1.素数个数
【题目描述】
“六一”儿童节到了,五年级2班的朱老师组织了数素数游戏,游戏规则是这样的:张老师任意给出一个正整数M,参加游戏者说出1至M之间(包括1和M)素数的个数,谁最先说出正确的答案将会得到一个奖品。现在请你编写一个程序对给出的M,输出正确的答案。
【输入】
输入只有一个正整数M(M为小于30000的正整数)
【输出】
输出只有一个数,就是1到M之间的素数的个数。
【样例输入】
20
【样例输出】
8
#includeusing namespace std; int main() { int m,s=0;bool p; cin>>m; for(int i=2;i<=m;i++)//1不是质数 { p=true; for(int j=2;j 2.素数的和
【题目描述】
如果一个整数只能被1和它本身整除,这样的数就叫素数。编程输入n和m(n、m在2和200之间,且n
【输入格式】
n m
【输出格式】
s(n~m之间所有素数的和)
【样例输入】
2 10
【样例输出】
17
#includeusing namespace std; int main() { int n,m,s=0;bool p; cin>>n>>m; for(int i=n;i<=m;i++) { p=true; for(int j=2;j 3.个位数为1的素数
【题目描述】
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
【输入】
一行,输入n。
【输出】
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开),如果没有则输出-1。
【样例输入】
70
【样例输出】
11 31 41 61
#includeusing namespace std; int main() { int n,m;bool p,w=false; cin>>n; for(int i=2;i 4.求第n小的质数
【题目描述】
输入一个正整数n,求第n小的质数。
【输入】
一个不超过10000的正整数n。
【输出】
第n小的质数。
【样例输入】
10
【样例输出】
29
#includeusing namespace std; int main() { int n,i=1,s=0;bool p; cin>>n; while(n) { p=true;i++; for(int j=2;j 5.回文素数
【题目描述】
如果一个数从左边读和从右边读都是同一个数, 就称为回文数,既是素数又是回文数的数,称为回文素数。找出某个范围内的回文素数。
【输入】
整数m和n,2=
【输出】
m~n范围内的所有回文素数,从小大到排列,每行10个数。
【样例输入】
5 500
【样例输出】
5 7 11 101 131 151 181 191 313 353
373 383
#includeusing namespace std; int main() { int m,n,x,xin,s=0;bool p; cin>>m>>n; for(int i=m;i<=n;i++) { p=true; for(int j=2;j 6.绝对素数
【题目描述】
绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。编写一个程序,求出所有m~n(m≥11,n≤1000000)之间的绝对素数。
【输入】
两个整数m和n。
【输出】
m~n之间的绝对素数,每个数之间用空格隔开,每行输出10个
【样例输入】
11 300
【样例输出 】
11 13 17 31 37 71 73 79 97 101
107 113 131 149 151 157 167 179 181 191
199
#includeusing namespace std; int main() { int m,n,x,xin,s=0;bool p,w; cin>>m>>n; for(int i=m;i<=n;i++) { x=i;xin=0;p=true;w=true; while(x!=0) { xin=xin*10+x%10; x/=10; } //得出逆序数 for(int j=2;j 7.孪生素数
【题目描述】
在质数的大家庭中,大小之差不超过2的两个质数称它俩为一对孪生素数,如2和3、3和5、17和19等等。请你统计一下,在不大于自然数N的质数中,孪生素数的对数。
【输入】
只有一行,一个自然数N。(N<=100 0000)。
【输出】
只有一行,一个整数,表示N以内孪生素数的对数。
【样例输入】
20
【样例输出】
5
#includeusing namespace std; int main() { int n,s=0;bool p,w; cin>>n; for(int i=2;i 8.纯粹素数(不确定位数)
【题目描述】
纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。输入一个整数N,如果是纯粹素数输出yes,否则输出no。
【输入】
正整数N,N<=10^9。
【输出】
yes或者no,yes表示N是纯粹素数,no表示N不是纯粹素数。
【样例输入】
1013
【样例输出 】
yes
解析:举例N为2131,按照1、31、131、2131的顺序依次判断是否为素数。
#includeusing namespace std; int main() { int n,x,s=0,mod=1;bool p=true; cin>>n; x=n; while(x!=0) { s++; x/=10; }//先判断 n 为几位数 for(int i=1;i<=s;i++) { mod*=10; x=n%(mod);//从低位到高位依次判断 for(int j=2;j



