关于C++素数判断循环代码的两处逻辑疑问求解
素数判断代码的逻辑疑问解答
先看你提供的C++代码:
using namespace std; int main() { int i, n; bool is_prime = true; cout << "Enter a positive integer: "; cin >> n; if (n == 0 || n == 1) { is_prime = false; } for (i = 2; i <= n/2; ++i) { if (n % i == 0) { is_prime = false; break; } } if (is_prime){ cout << n << " is a prime number" << " checked against : " << i << endl; cout << endl; } else cout << n << " is not a prime number"<< " checked against : " << i << endl; cout << endl; return 0; }
疑问1:为什么数字2会被判定为素数?
当输入n=2时,代码里的for循环条件是i <= n/2,也就是2 <= 1——这个条件不成立,所以循环体根本没有执行。is_prime的初始值是true,也没有被任何代码修改,所以最终判定2是素数。你担心的2%2==0的情况,其实根本没机会触发,因为循环连一次都没跑。
疑问2:为什么判断9时,9%2≠0但循环继续到i=3?
循环的逻辑是:只要i <= n/2(n=9时,n/2=4),就会持续迭代。只有当找到能整除n的i时,才会通过break终止循环。
- 当
i=2时,9%2=1≠0,不会触发is_prime=false和break,所以循环继续执行,i自增到3; i=3时,9%3=0,触发条件,把is_prime设为false并break终止循环,最终判定9不是素数。
简单说,循环不会因为某次余数不为0就停止,它会一直检查到i超过n/2,或者中途找到能整除的数才停下来。
内容的提问来源于stack exchange,提问作者Artour Kats
相关产品推荐
相关产品推荐

