马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|