需要让这个程序检查Number是否为素数,但没有if语句,如何使它为1工作?不能更改主
#include <iostream>
bool prime(int x){
for (int i = 2; i < x; ++i){
return (x % i != 0);
}
}
int main() {
std::cout << std::boolalpha << prime(1344) << std::endl;
}
函数在循环的第一次迭代中返回,并且只检查数字是偶数还是奇数。它基本上与相同
bool prime(int x){
return (x % 2 != 0);
}
对于x==1
的特殊情况,您只需要添加条件,即x
只有在不是1
时才能是素数。我们可以通过要求我们还没有在循环条件中找到一个因子来打破循环。也就是说:我们从假设is_prime = true
开始,除非它是1
,并且一旦我们知道它不是素数就停止:
bool prime(int x){
bool is_prime = true and (x != 1);
for (int i = 2; i < x and is_prime; ++i){
is_prime = is_prime and (x % i != 0);
}
return is_prime;
}
请注意,需要检查的最大因子实际上是sqrt(x)
,因为如果x
的除数大于sqrt(x)
,那么它的除数也必须小于sqrt(x)
。
附言:不使用if
是一个相当人为的要求。即使上面的解决方案没有if
,它仍然有几个分支。如果你想要一个没有分支的解决方案,那么这不是它
bool prime(int x){
int limit = sqrt(x);
bool isPrime = 1^x;
for(int i=2; i <= limit; i++){
isPrime &= (x % i != 0);
}
return isPrime;
}
bool isPrime =1^x
对于1为假,而对于所有其它数字为真。
并且(x % i != 0)
对于所有素数总是为真,并且对于非素数至少有一个为假