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

来源:百度知道 编辑:UC知道 时间:2024/06/10 08:57:35
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++这条语句无论如何都无法执行呀?

答案没有问题。

if(i<m) break;是看上在的循环是通过break终止的还是正常终止的,如果是通过break终止的i就会<m。这时,表明m已经不是素数了。

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

main()
{int n,m,i;
n=0;
while(1) {
m=n*n-n+41;
for(i=2;i<m;i++) //这个for循环就是用来控制m一定是质数
if(m%i==0) break; // 到这里你可能会问是质数,但是被自己求
// 余 同样也会是0阿 例:41%41=0;
if(i<m) break; //这里就能回答上面问题了...如果他是质数的话
//那就说明i=m那这里就不执行,如果不是质数而是素
// 数的话那他就跳出while循环
n++;} //n++是肯定执行的,因为while循环一定要到if(i<m) break;这
里的break执行后下面的n++才会停止
printf("%d\n",n); 然后输出n;
}

答案并不是错的,而是难理解而已