【发布时间】:2017-06-11 13:43:45
【问题描述】:
我想,这段代码会给我输入合成数的最大素数。但是,它适用于某些输入,但不适用于其他输入。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num=1, sum, count=0, test;
cin>>test;
while(num<=(sqrt(test)))
{
if(test%num==0)
{
for (int prime=2; num>prime; prime++)
{
if(num%prime==0)
count ++;
}
if (count == 0)
sum=num;
}
num++;
}
cout<<sum;
}
不起作用的示例:
输入:6,预期:3,得到:2;
输入:540,预期:5,得到:3;
输入:600,预期:5,得到:3;
谁能告诉我要改什么?
【问题讨论】:
-
请举例说明它不起作用。即输入和预期的内容
-
还将
sqrt移出while条件以提高速度 -
您将搜索限制为不大于
sqrt(test)的数字。这意味着,至少对于两个素数乘积的数字,您只能找到两者中较小的一个。在这种情况下,较小的素数一定是<= sqrt(test),较大的素数是>= sqrt(test) -
当然不行,因为
3>sqrt(6). -
谢谢你们指出所有这些
标签: c++ prime-factoring