蓝桥杯——趣味素数问题(2017.2.3)
来源:互联网 发布:linux 卸载jdk1.7 编辑:程序博客网 时间:2024/05/21 22:28
一、基本素数问题回顾
1. 求给定范围start~end之间的所有素数(1<=start<end)
源代码:
#include <stdio.h>#include <math.h>int main(){int start,end;int i,j,k,num,flag;while(scanf("%d %d",&start,&end)!=EOF){num=0;for(i=start;i<=end;i++){k=sqrt(i);flag=1;for(j=2;j<=k;j++){if(i%j==0){flag=0;break;}}if(flag==1) //此处写 j>=k+1 亦可{num++;printf("%d ",i);if(num%10==0)printf("\n");}}printf("\n%d~%d之间的素数个数为%d\n",start,end,num);} return 0;}程序截图:
2. 输入一个正整数n,判断该数是否为素数
源代码:
#include <stdio.h>#include <math.h>int is_Prime(int n){int i;int flag=1;for(i=2;i<=sqrt(n);i++){if(n%i==0){flag=0;break;}}return flag;}int main(){int n;while(scanf("%d",&n)!=EOF){if(is_Prime(n))printf("%d是素数\n",n);elseprintf("%d不是素数\n",n);}return 0;}
程序截图:
3. 输入一个正整数n,输出第n个素数(n<=10000)
源代码:
#include <stdio.h>#include <math.h>#define maxn 100000void Prime(int prime[],int n){int i,j,k;int flag,t=0;int low,high,mid; for(i=2;i<=150000;i++){k=sqrt(i);flag=1;for(j=2;j<=k;j++){if(i%j==0){flag=0;break;}}if(flag==1)prime[t++]=i;}low=0,high=t-1; //因素数数组较大,用折半查找法素数数组下标,若下标+1=n,则输出对应第n个素数 while(low<=high){mid=(low+high)/2;if(mid==n){printf("第%d个素数是:%d\n",n,prime[n-1]);break;}else if(mid<n)low=mid+1;elsehigh=mid-1;}printf("\n");}int main(){int n,prime[maxn]={0};while(scanf("%d",&n)!=EOF)Prime(prime,n); return 0;}
程序截图:
二、哥德巴赫猜想
输入2000以内不小于4的正偶数n,将其分解为两个素数之和(即验证哥德巴赫猜想对2000以内的正偶数恒成立)
源代码:
#include <stdio.h>#include <math.h>#define maxn 2000void Split(int prime[],int n) //正偶数分解 {int i,j,k;int num=0,flag;for(i=2;i<=2000;i++){k=sqrt(i);flag=1;for(j=2;j<=k;j++){if(i%j==0){flag=0;break;}}if(flag==1)prime[num++]=i;}for(i=0;i<num;i++) //表示为两个素数之和,且前者小于后者 {for(j=0;j<num;j++){if(n==prime[i]+prime[j] && prime[i]<=prime[j])printf("%d=%d+%d\n",n,prime[i],prime[j]);}}}int main(){int n,prime[maxn]={0};while(scanf("%d",&n)!=EOF)Split(prime,n);return 0;}
程序截图:
另:控制不只一组解的情况下,输出第一个素数最小的那组解
源代码:
#include <stdio.h>#include <math.h>#define maxn 2000void Split(int prime[],int n){int i,j,k;int num=0,flag,ok;for(i=2;i<=2000;i++){k=sqrt(i);flag=1;for(j=2;j<=k;j++){if(i%j==0){flag=0;break;}}if(flag==1)prime[num++]=i;}for(i=0;i<num;i++){for(j=0;j<num;j++){ok=0; //输出一组解的标志 if(n==prime[i]+prime[j] && prime[i]<=prime[j]) //发现符合要求的一组解,输出之,并将ok标志置为1 {printf("%d=%d+%d\n",n,prime[i],prime[j]);ok=1;}if(ok==1) //随后不在查找其他符合要求的解,直接跳出内外层循环 break;}if(ok==1)break;}}int main(){int n,prime[maxn]={0};while(scanf("%d",&n)!=EOF)Split(prime,n);return 0;}程序截图:
三、可逆素数
从小到大输出所有4位数的可逆素数
可逆素数是指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数
源代码:
#include <stdio.h>#include <math.h>int is_Prime(int n){int i;int flag=1;for(i=2;i<=sqrt(n);i++){if(n%i==0){flag=0;break;}}return flag;}int main(){int i,j,wei;int reversenum,num=0;for(i=1000;i<=9999;i++){if(is_Prime(i)){j=i,wei=1000,reversenum=0;while(j>0) //求一个数的“反序数”,如1234->4321 {reversenum+=((j%10)*wei);j/=10;wei/=10;}if(is_Prime(reversenum)){printf("%d -- %d ",i,reversenum);num++;if(num%4==0) //控制每输出4组数换一行 printf("\n");} }}return 0;}
程序截图:
四、回文素数
求出所有不超过1000的回文素数
回文素数是指:一个整数n,其为素数,且从左向右和从右向左读数值都相同
源代码:
#include <stdio.h>#include <math.h>int is_Prime(int n){int i;int flag=1;for(i=2;i<=sqrt(n);i++){if(n%i==0){flag=0;break;}}return flag;}int main(){int i,t,reversenum;for(i=1;i<=9999;i++){reversenum=0;t=i;while(t>0) //求"反序数"{reversenum=reversenum*10+t%10;t/=10;}if(is_Prime(i)) //i为素数 {if(i==reversenum) //且i从左向右和从右向左数值相同,输出i printf("%d\n",i);}}return 0;}
程序截图:
五、孪生素数
求出m~n之间(包括m和n)的孪生素数,用(x,x+2)的形式表示
孪生素数是指:间隔为2的两个相邻素数(如(1,3),(3,5),(11,13)等)
源代码:
#include <stdio.h>#include <math.h>int is_Prime(int n){int i;int flag=1;for(i=2;i<=sqrt(n);i++){if(n%i==0){flag=0;break;}}return flag;}int main(){int i,m,n;while(scanf("%d %d",&m,&n)!=EOF)for(i=m;i<=n;i++){if(is_Prime(i) && is_Prime(i+2))printf("(%d,%d)\n",i,i+2);}return 0;}程序截图:
六、梅森素数
求出指数为n(n<20)的所有梅森素数
梅森素数是指:形如 2^n-1 的正整数,其中指数n是素数,且 2^n-1 也是素数
源代码:
#include <stdio.h>#include <math.h>int is_Prime(int n){int i;int flag=1;for(i=2;i<=sqrt(n);i++){if(n%i==0){flag=0;break;}}return flag;}int main(){int i,j,n;while(scanf("%d",&n)!=EOF){for(i=1;i<=n;i++){j=pow(2,i)-1;if(is_Prime(i) && is_Prime(j))printf("pow(2,%d)=%d\n",i,j);}}return 0;}
程序截图:
0 0
- 蓝桥杯——趣味素数问题(2017.2.3)
- 蓝桥杯——趣味数组问题一(2017.2.5)
- 蓝桥杯——趣味数组问题二(2017.2.14)
- 蓝桥杯——趣味分数问题(2017.2.17)
- 蓝桥杯——趣味整数问题一(2017.1.30)
- 蓝桥杯——趣味整数问题二(2017.1.31)
- 蓝桥杯——趣味数学问题举例一(2017.2.10)
- 蓝桥杯——趣味数学问题举例二(2017.2.11)
- 蓝桥杯——趣味数学问题举例三(2017.2.13)
- 趣味素数
- 蓝桥杯——趣味逻辑推理一(2017.2.16)
- 蓝桥杯——趣味逻辑推理二(2017.2.17)
- java趣味算法(一)——约瑟夫问题
- 趣味素数-素数 java
- 趣味C—猴子吃桃问题
- 趣味算法之趣味素数
- 蓝桥杯——趣味算式
- 5.1趣味素数之素数
- 100. Same Tree
- 【video】FLV封装原理
- com.thoughtworks.xstream.io.HierarchicalStreamDriver异常处理
- 手机屏幕拓展设想
- Android ORM框架greenDao3.0使用简介
- 蓝桥杯——趣味素数问题(2017.2.3)
- Python学习笔记05_函数
- Android模拟登陆学信网获取四六级成绩
- 一起学WEB(六) 打扮你的网页(一)
- LeetCode 102. Binary Tree Level Order Traversal
- C++ 关于namespace
- parser.parse is not a function——arcgis api报错解决办法
- 结构体类型作为函数参数
- SQL Server中获取第一天和最后一天