为什么j=n不起作用#include<stdio.h> #include<math.h> int prime(int x) { int i,k; if(x==1) return 0; k=(int)sqrt(x); for(i=2;i<=k;i++) { if(x%i==0) return 0; } return 1; } int main() { int M,n=0,j; scanf("%d",&M); for(j=1;j<=M;j++) { if(j==n) break; if(prime(j)) { n=M-j; if(prime(n)) printf("%d %d\n",j,n); } } return 0; }
时间: 2023-11-30 07:05:03 浏览: 107
C语言练习1[文].pdf
在这段代码中,变量j的作用是从1到M枚举所有可能的质数。然后,如果j等于n,则跳出循环,否则判断j是否为质数。但是,在这段代码中,变量n的初始值为0,因此j==n这个条件永远不会成立,从而导致无限循环。
你可以将变量n的初始值改为一个较大的数,例如M,以确保j==n这个条件可以成立并且循环可以正常结束。同时,你还需要将判断条件修改为j<=n,这样才能枚举到所有可能的质数。修改后的代码如下:
```
#include<stdio.h>
#include<math.h>
int prime(int x) {
int i,k;
if(x==1)
return 0;
k=(int)sqrt(x);
for(i=2;i<=k;i++) {
if(x%i==0)
return 0;
}
return 1;
}
int main() {
int M,n,j;
scanf("%d",&M);
n = M;
for(j=1;j<=M;j++) {
if(j==n)
break;
if(prime(j)) {
n=M-j;
if(prime(n))
printf("%d %d\n",j,n);
}
}
return 0;
}
```
希望能帮到你!
阅读全文