|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- int main ()
- {
- int i,j;//i代表数,j用来判断是否为素数
- long int sum;
- for (i = 0; i < 10000 ;i++ )
- {
- for (j = 0 ; j <= (int)(i/2) ; j++)
- {
- if (i % j == 0)
- {
- sum++; break;
- }
- }
- }
- printf ("1-10000共有%ld个素数",sum);
- return 0;
- }
- ~
- ~
复制代码
错在哪里
这段代码有几个问题:
1. 在循环中, j 的取值范围应该是从 2 开始到 i 的一半,而不是从 0 开始到 i 的一半。因为除数不能为 0,也不能为 1,所以应该从 2 开始判断。
2. 在判断素数时,应该判断 i 能否被 j 整除,而不是判断 i 除以 j 的余数是否为 0。所以判断条件应该是 i % j == 0 ,而不是 i % j != 0 。
3. 在每次找到一个非素数时,应该立即跳出内层循环,而不是继续判断后面的数。所以应该使用 break 语句来跳出内层循环。
修正后的代码如下:
- #include <stdio.h>
- int main ()
- {
- int i, j;
- long int sum = 0;
-
- for (i = 2; i <= 10000; i++)
- {
- for (j = 2; j <= i/2; j++)
- {
- if (i % j == 0)
- {
- sum++;
- break;
- }
- }
- }
-
- printf("1-10000共有%ld个素数\n", sum);
-
- return 0;
- }
复制代码
这段代码用于统计 1 到 10000 之间的素数个数。修正后的代码会正确地判断素数,并将非素数的个数累加到 sum 变量中,最后打印出结果。
|
|