问题描述
我目前正在解决这个问题,并计划不使用函数。 但是,我有一个问题。 为什么要将 1 初始化为标识符“prime”?
int main() {
int loop,number;
int prime = 1;
number = 11;
for(loop = 2; loop < number; loop++) {
if((number % loop) == 0) {
prime = 0;
}
}
if (prime == 1)
printf("%d is prime number.",number);
else
printf("%d is not a prime number.",number);
return 0;
}
解决方法
因为在条件 1
中使用了 prime == 1
,因此 1
表示该数是素数。
如果您将条件写为 prime
,则可以使用适合于 int
的任何非零数字作为素数标志(未找到除数标志)。例如,您可以使用 1
、42
、200
、334
、555
、777
、999
、{{ 1}}、2021
等
prime
只是一个标志。如果 prime
为 1,则表示 number
是素数。如果 prime
为 0,则表示 number
不是质数。
初始化为prime=1;
,条件输出为
if (prime == 1)
printf("%d is prime number.",number);
这里的逻辑是“首先假设当前处理的数字是素数”。
代码还有一个prime = 0;
,在一定条件下循环执行。
所以有很多机会重置为“不是素数”。
这符合质数的概念。如果没有其他除数,它们就是正整数。
该代码查找除数。任何发现都意味着“不是素数”。
相反的逻辑,即假设非质数,然后寻找质数的原因是行不通的。
您现在可以查看您的代码。我只是将变量名称和数据类型更改为布尔值。希望你现在能理解。
int main() {
int loop,number;
bool numberIsPrime = true;
number = 11;
for(loop = 2; loop < number; loop++) {
if((number % loop) == 0) {
numberIsPrime = false;
}
}
if ( numberIsPrime == true)
printf("%d is prime number.",number);
else
printf("%d is not a prime number.",number);
return 0;
}