这是一个for循环,用于在给定范围内打印素数,并在最后打印给定范围内的素数。该程序还打印1作为素数。
程序:
#include <stdio.h>
int main(){
int a,b,k,c,s=0;
printf("Enter the start : ");
scanf("%d",&a);
printf("Enter the end : ");
scanf("%d",&b);
for( ;a<=b;a++){
k = 1;
for(c=2;c<=a/2;c++){
if(a%c==0) {
k-=1;
break;
}
else
continue;
}
(k!=0)?(printf("%d ",a),s+=1):printf("");
}
printf("\nNo. of Primes : %d",s);
return 0;
}
输出:
Enter the start : 1
Enter the end : 25
1 2 3 5 7 11 13 17 19 23
No. of Primes : 10
我想知道如何更改代码只能获得质数。
你得到1
作为结果,因为你设置
k = 1;
和以下循环
for(c=2;c<=a/2;c++){
...
如果a
是1
,因为c <= a
没有实现,所以不会改变这一点。
更换
k = 1;
同
if(a > 1) k = 1;
else k = 0;
循环中的代码
for(c=2;c<=a/2;c++){
if(a%c==0){
k-=1;break;}
else continue;
}
有点奇怪。
我会写k-=1;
而不是k=0;
,因为这清楚表明你希望价值成为0
。你可以删除else continue;
,因为这就是循环无论如何都会做的。
您测试素数的代码也将传递给1
数字。在这种情况下不输入内部for
循环,因此k
永远不会设置为零,并且行(k != 0) ? (printf("%d ", a), s += 1) : printf("");
将采用真正的分支。
简单修复:
(k != 0 && a != 1) ? ...