解题思路:
假如i是素数,则i不能整除2~i之间的所有数,定义一个变量j,取 2~i之间所有值。如果中间的数都不能除尽, 那么一起循环到最后一次j变成i时,i%j==i%i==0 这个时候i==j ,i就一定是素数。如果在j=0~i的循环中途 就出现i%j==0,说明i一定不是素数.
参考代码:
#include <stdio.h> int main() { int N,i,j; scanf("%d",&N); for(i=2; i<=N; i++) //遍历2~N之间的所有数 { for(j=2; j<=i; j++) //j相当于0~i之间的所有数,i%如果除0~i之间的所有数都都不能除尽,那么i是素数。 { //i%j==0说明i能整除j 当i和j相等时,那么i%j必须为0 if(i%j==0&&i!=j) //如果j不是在最后一个i=j的情况下i%j==0,说明在j在取0~i的某个值时,i能将其整除,因此i肯定不是素数。 break; if(i%j==0&&i==j) //说明i%(0~i之间)都不能除尽,只有最后i==j的情况下才能除尽,此时已经把所有数都判断完了,i是素数 printf("%d\n",i); } } return 0; }
0.0分
8 人评分
int n,i,j; bool flag=1; scanf("%d",&n); for(i=2;i<=n;i++){ for(j=2;j<=i/2;j++){ if(i%j==0){ flag=0; break; } } if(flag) printf("%d\n",i); flag=1; } 为什么编译错误
#include <stdio.h> int main() { int N,i,a,b; scanf("%d",&N); for(i=1;i<N;i++) { for(a=2;a<i;a++) { if(i%a==0) { b++; } } if(b==0) { printf("%d\n",i); } b=0; } return 0; } 请问为什么答案错误?
#include<stdio.h> int main() { int i,n,j; scanf("%d", &n); for(i=2;i<=n;i++) { for(j=2;j<=i;j++) { if(i%j==0) { if(j==i) printf("%d\n",i); break; } } } return 0; }
#include<stdio.h> int main() { int N,i=2,x=2; scanf("%d",&N); while(x!=N) { for(i=2;i<x;i++) { if(x%i==0) break; } if(i==x) printf("%d\n",x); x++; } return 0; }