c++ - 为什么我的循环是无限的?我用91测试过
问题描述
我正在检查一个数字是否是素数,只检查从 3 到它的平方根的任何奇数是否是它的因数,一旦它有一个,那么这个数字就不是素数。我不明白为什么我的循环似乎是无限的。
我添加了 cout 行以查看问题从哪里开始,但并没有真正显示
int countFactors(int num)
{
cout << "Inside prime\n";
int factors = 0, x = 0, i;
x = int(sqrt(num));
for (i = 3; i <= x; i += 2)
{
cout << "Inside prime for \n";
while(factors < 1)
{
cout << "Inside Prime while";
if (num % i == 0)
{
factors++;
}
}
}
return factors;
}
我期望该函数接收从 19 开始的任何数字,检查它是否具有 3 的奇数因子,一旦找到该因子,循环退出,因为该数字不是奇数,因为 1 本身和一个额外的数字是因子。函数返回 0 表示素数或 1 不是素数。
解决方案
int countFactors(int num)
{
int factors = 0, x=0, i,y=1;
x = int(sqrt(num));
while(y>0){
for (i=3;i<=x;i+=2)
{
if (num%i==0)
{
factors++;
y--;
}
}
if(factors ==0)
{
y--;
}
}
return factors;
}
推荐阅读
- angular - 上传后如何从 Firebase 获取 Url 文件以返回发送到后端的 Url 字符串并保存数据库 My SQL
- json - 动态更新json表字段
- python - 如何在 python (Recursion) 中进行二进制搜索,但不包括列表的最大值和最小值?
- python - flask_socketio 连接到客户端,但没有收到消息
- javascript - 在反应中 event.target.value 的类型应该更改为整数
- javascript - Vuetifys 在工具栏中添加单独的文本字段失败
- javascript - 在什么时候比较“整数”和“浮点数”等于“真”?
- unit-testing - 如何对具有协程`GlobalScope.launch`的函数进行单元测试
- algorithm - Kd树:具有易处理伪代码的最近邻搜索算法
- asp.net - 实体框架代码优先迁移类不起作用