q:4、编一程序,找出使下列表达式值不为素数的最小n值。

来源:百度知道 编辑:UC知道 时间:2024/06/10 06:59:27
4、编一程序,找出使下列表达式值不为素数的最小n值。

n*n – n + 41 n = 0 , 1 , 2 , 3 ,……
书上给的答案如下:
main()
{int n,m,i;
n=0;
while(1) {
m=n*n-n+41;
for(i=2;i<m;i++)
if(m%i==0) break;
if(i<m) break;
n++;}
printf("%d\n",n);
}
请问倒数第三步if(i<m) break;是什么意思?是不是大案有问题?我觉得n++这条语句无论如何都无法执行呀?

当然能执行,
main()
{int n,m,i;
n=0;
while(1) {
m=n*n-n+41;
for(i=2;i<m;i++)
if(m%i==0) break; //for循环只控制这一条语句
if(i<m) break; //如果有i<m满足m%i==0就执行这一条语句,说明此时的n值符合题意
n++;} //如果i一直累加到m都没有找到符合m%i==0的i,则执行这条语句
printf("%d\n",n);
}

if(i<m) break;是为了包装得到使表达式值不为素数的最小n值时,程序可以退出while(1)循环
当为找到满足条件的最小n值时,n++是可以执行的