c++ - 需要让这个程序检查 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;
}
解决方案
您的函数在循环的第一次迭代中返回,并且仅检查数字是偶数还是奇数。它与以下内容基本相同:
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
,它仍然有几个分支。如果您想要一个没有分支的解决方案,那么这不是它。
推荐阅读
- php - 从php表单上传图片
- javascript - 如何禁用或自定义在不同的移动浏览器上
- python-3.x - Discord.py 删除除 pin 消息之外的所有消息
- java - 摄氏度和华氏度的用户输入验证
- c# - 使用 LINQ 查询选择对象列表
- forms-authentication - 从用户那里获取身份验证 cookie 的方法
- python - 在 Python 中将 CSV 转换为 CLF
- php - 使用 POST 方法打开新窗口导致 404 错误(找不到文件)
- python - 尝试使用 sklearn 拟合 GaussianNB 分类器时出现 ValueError
- java - 循环链表:NullPointerException 错误