首页 > 解决方案 > 需要让这个程序检查 Number 是否为素数但没有 if 语句,如何让它为 1 工作?主线不能改

问题描述

需要让这个程序检查 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;
}

标签: c++c++11c++14

解决方案


您的函数在循环的第一次迭代中返回,并且仅检查数字是偶数还是奇数。它与以下内容基本相同:

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)then 它也必须有一个除数小于sqrt(x)

PS:不使用 anif是一个相当人为的要求。即使上面的解决方案没有if,它仍然有几个分支。如果您想要一个没有分支的解决方案,那么这不是它。


推荐阅读