如何解决需要让这个程序检查 Number 是否为素数但没有 if 语句,如何使它对 1 起作用?主要不能改变
需要让这个程序检查 Number 是否为素数但没有 if 语句,如何使它对 1 起作用? main 不能改变
#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)
,那么它的除数也必须小于 {{1 }}。
PS:不使用 sqrt(x)
是一个相当人为的要求。即使上面的解决方案没有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)
对所有质数始终为真,对非质数至少有一个假
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。