我认为这段代码会给出复合数输入的最大素数因子。但是,它适用于某些输入,而不适用于其他输入。
#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;
有人可以告诉我要改变什么吗?
答案 0 :(得分:2)
如果您想要最大的素数因子,则需要一直检查test/2
。例如。对于38,你目前只检查6,并且错过19。
此外,您需要在每次测试后休息计数。
答案 1 :(得分:2)
您必须添加
count = 0
之后
if (count == 0)
sum = num;
此外,当输入数为素数时,最大素数除数本身就是输入数。在这种情况下,变量sum
永远不会出现。在程序开始时0
和while
循环添加
if (sum == 0)
sum = test;
答案 2 :(得分:0)
迟到但仍然:
private Dictionary<Point, CheckBox> checkBoxes;
private Dictionary<Point,CheckBox> GenerateCheckBoxes(Form form, int width, int height, int padding) {
Dictionary<Point, CheckBox> checkboxes = new Dictionary<Point, CheckBox>();
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
CheckBox checkBox = new CheckBox();
Point location = new Point(x*(15+padding), y*(15+padding));
//Formatting
checkBox.Location = location;
checkBox.Text = string.Empty;
checkBox.Size = new Size(15,15);
//Custom behaviour
checkBox.Click += CheckBox_Click;
form.Controls.Add(checkBox);
checkboxes.Add(new Point(x, y), checkBox);
}
}
return checkboxes;
}
private void CheckBox_Click(object sender, EventArgs e)
{
CheckBox clicked = (CheckBox)sender;
}
private CheckBox GetCheckBoxAtPosition(int x, int y) {
return checkBoxes[new Point(x, y)];
}
您可以使用自动。另外作为一般提示:不要使用“using namespace std”。在大型项目中工作时,习惯于编写std ::将为您省去一些麻烦。