c++ - 错误:查找数字是否为素数的代码仅在 47 之前有效
问题描述
我编写了一个 C++ 代码来查找给定数字是否为素数,直到 47 为止都可以正常工作,但是对于大于 47 的素数,输出为 NO(不是素数)。请帮忙。
#include<iostream>
using namespace std;
int main()
{
int x,t,z=2,y=1;
cout<<"Enter the number: ";
cin>>x;
while (z<x )
{
t=x%z;
z++;
y=t*y;
}
if(y==0)
cout<<"NO";
else
cout<<"prime";
return 0;
}
解决方案
您的计算很快导致整数溢出。由于素数除了 1 和它们本身之外没有除数,t = x % z
因此将z
一直是素数。因此,对于任何x
素数,您都在有效地计算 的阶乘z-1
,它在溢出之前可以进行约 10 次迭代。
一旦找到可以打印“否”并返回的z
位置,您就不需要在这里进行任何乘法运算。x % z == 0
示例片段:
while (z < x)
{
if(t % z == 0) {
std::cout << "No";
return 0;
}
z++;
}
std::cout<<"prime";
推荐阅读
- python - 如何根据元素的值从数组中删除元素?
- html - 使用图像的宽度作为标题和文本
- java - 如何设置 Kafka 连接器以在 Debezium 中使用自定义转换?
- php - 在这种情况下,如何删除文件中的某条消息?
- python - Function to split DF into multiple DFs and perform all operations on each one
- flutter - 在 settState 中使用“count = count”是否有意义?
- docusignapi - 试图将 Docusign 沙盒应用程序移至生产环境。身份验证请求无效:不支持响应类型
- docker - docker reverse proxy : can't get jwilder/nginx reverse proxy work with serveral bridge networks
- eclipse - 无法解析原型 org.apache.maven.archetype Webapp
- javascript - 带有背景剪辑的内联元素:文本;在 Safari 中