|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
任务描述
实验课本实验3 程序设计第(10)题
本关任务:用筛法构造素数表,输入m(4≤m≤1000000),查表找出m之前的所有孪生素数。
相关知识
孪生素数
孪生素数是指距离为2的相邻素数,例如(3,5),(5,7)
- #include<stdio.h>
- int main()
- {
- static i,j,limit,a[100000],b[100000];/*b[100]存放素数*/
- static long long k;
- scanf("%d",&limit);
- for(a[0]=a[1]=0,i=2;i<limit;i++)
- /*假定2~99都是素数,如果下标为1,标记为素数*/
- a[i]=1;
- for(i=2;i<(limit/2);i++)
- if(a[i])
- {
- for(j=i*i;j<limit;j+=i)
- /*从2开始,筛掉某个素数的倍数*/
- a[j]=0;
- }
- for(k=0,i=2,j=0;i<limit;i++)
- {
- if(a[i])
- {
- b[k]=i;
- k++;
- }
- }
- for(k=0;k<limit;k++)
- {
- if(b[k+1]-b[k]==2)
- printf("(%d,%d) ",b[k],b[k+1]);
- }
- return 0;
- }
复制代码
当我输入limit的值大于10万的时候,就不输出了,现在我想让limit的值为100w时也能输出,请问怎么修改?
可以用for循环
- #include <stdio.h>
- // 判断是否为素数
- int Judge(long long num)
- {
- int j;
- for(j = 2; j < num; j++)
- {
- if(num % j == 0)
- {
- return 0;
- }
- }
- return 1; // 返回1是素数
- }
- int main(void)
- {
- long long m, i;
- int count = 0;
- printf("请输入查找多少数字前的素数(4≤m≤1000000):");
- scanf("%lld", &m);
-
- for(i = 2; i <= m; i++)
- {
- if(Judge(i) && Judge(i+2)) // 如果i和i+2都是素数,打印
- {
- count += 1;
- printf("%lld和%lld\t", i, i+2);
- if(count % 5 == 0)
- {
- printf("\n");
- }
- }
- }
-
- return 0;
- }
复制代码
|
|