【发布时间】:2017-12-20 21:48:59
【问题描述】:
我正在尝试用 C 语言打印以下系列 4 6 12 18 30 42 60 72....最多 n。它的逻辑很简单;我们必须打印数字,使得前面和后面的数字应该是素数!但是下面的代码在打印后没有循环 4.下面的代码有什么问题?
#include <stdio.h>
int main(){
int n, i, j, p2, k;
int count1=0, count2=0;
printf("enter the number:\n");
scanf("%d",&n);
for(i=3;i<n;i++){
for(j=2;j<i;j++){
if(i%j==0){
count1++;
break;
}
}
p2=i+2;
for(k=2;k<i;k++){
if(p2%k==0){
count2++;
break;
}
}
if(count1==0 && count2==0){
printf("%d",i+1);
}
}
}
【问题讨论】:
-
3 和 5 之后的所有素数对(从 5 和 7 开始)对于某个整数 x 采用 6x±1 的形式。你将如何确定素数——你应该有一个函数来做到这一点吗?然后,您可以遍历 6 的倍数并检查 ±1 值的素数,如果两者都是素数则打印。此外,由于值 6x±1 总是奇数,因此您不需要检查是否可以被 2 整除;并且(通过构造)它们也不能被 3 整除。这可以加快素数检查。此外,在第一个内部循环中,您可以使用
j * j < i从根本上减少步骤数。