c ++代码中的素数因子不适用于所有输入

时间:2017-06-11 13:43:46

标签: c++ prime-factoring

我认为这段代码会给出复合数输入的最大素数因子。但是,它适用于某些输入,而不适用于其他输入。

#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;

有人可以告诉我要改变什么吗?

3 个答案:

答案 0 :(得分:2)

如果您想要最大的素数因子,则需要一直检查test/2。例如。对于38,你目前只检查6,并且错过19。

此外,您需要在每次测试后休息计数。

答案 1 :(得分:2)

您必须添加

count = 0

之后

if (count == 0) sum = num;

此外,当输入数为素数时,最大素数除数本身就是输入数。在这种情况下,变量sum永远不会出现。在程序开始时0while循环添加

之后启动它

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 ::将为您省去一些麻烦。