微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要让这个程序检查 Number 是否为素数但没有 if 语句,如何使它对 1 起作用?主要不能改变

如何解决需要让这个程序检查 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 举报,一经查实,本站将立刻删除。