C++ 代码中的质因数并不适用于所有输入
Prime factor in c++ code does not work for all inputs
我想
,这段代码会给我合成数输入的最大素因数。但是,它适用于某些输入,而不适用于其他输入。
#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;
有人可以告诉我要改变什么吗?
如果你想要最大的素因数,你需要一直检查到test/2
。 例如,对于 38,您目前最多只能检查 6,错过 19。
此外,您需要在每次测试后休息计数。
您必须添加
count = 0
后
if (count == 0)
sum = num;
时,最大素数除数是输入数本身。在这种情况下,变量sum
从未启动。在程序的开头初始化它以0
并在循环添加之后while
if (sum == 0)
sum = test;
有点晚了,但仍然:
int main() {
auto num = 1;
auto sum = 0;
auto count = 0;
auto test = 0;
std::cin >> test;
while (num <= test / 2) {
count = 0;
if (test % num == 0) {
for (auto prime = 2; num > prime; prime++) {
if (num % prime == 0) count++;
}
if (count == 0) sum = num;
}
num++;
}
std::cout << sum;
}
您可以使用自动。另外作为一般提示:不要使用"使用命名空间 std"。习惯于编写 std:: 将为您节省一些麻烦,在处理大型项目时。
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 选择排序C++(已修改)并非适用于所有情况
- 无法让"std::enable_if"适用于无作用域枚举
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 确定夏令时是否适用于特定日期
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- QT 样式表主题,适用于使用属性选择器的整个应用程序
- C++带有适用于左值和右值的引用参数的函数
- 代码适用于调试,但不适用于发布
- C++17 和更新的 std::分配器是否适用于动态数量的自定义堆?
- 使用 std::cin 的输入仅适用于浮点数,仅当值尾随字母"e"(大写和小写)时
- 代码似乎不适用于较大的输入,但适用于较小的输入
- 我的代码仅适用于一个输入.请指教
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- 我需要转换一些代码,以便它适用于输入和输出文件文本
- 为什么这个C++程序适用于第一行输入,而不适用于第二行或第三行
- 为什么 execvp 仅适用于在我的 shell 中输入的第一个命令
- 使用向量的merge_sort适用于少于 9 个输入的情况