-1

可能的重复:
C# 中的素数因子

我试图让这个编码给我输入的整数的所有主要因素,包括它的重复项。我有这个当前的代码,它似乎正在工作,但它并没有显示它的所有主要因素和重复项。任何帮助,将不胜感激。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _1_Numeric_Problem
{
    class Program
    {
        static void Main(string[] args)
        {
            string myInput;
            int myInt;
            int p;

            Console.WriteLine(("Please input an integer"));

            myInput = Console.ReadLine();
            myInt = Int32.Parse(myInput);

            {
                for (int i = 2; i > 1; i++)
                {
                    if (i == 100000)

                        break;

                    if (myInt % i == 0)
                    {

                        if (i <= 3)
                        {

                            Console.Write("{0} ", i);
                            Console.ReadLine();
                            continue;
                        }

                        else
                        {
                            for (p = 2; p < i; p++)
                                if (i % p != 0)
                                {
                                    Console.Write("{0} ", i);
                                    Console.ReadLine();
                                    return;
                                    Console.ReadLine();
                                }
                                else
                                {
                                    p++;
                                    continue;
                                }

                        }
                    }
                }
            }
        }
    }
}
4

3 回答 3

2

尝试替换以下代码:

for (p = 2; p < i; p++) {
    if (i % p != 0) {
        Console.Write("{0} ", i);
        Console.ReadLine();
        return;
        Console.ReadLine();
    } else {
        p++;
        continue;
    }
}

用这个代替:

bool isPrime = true;

for (p = 2; p <= Math.Sqrt(i); p++) {
    if (i % p == 0) {
        isPrime = false;
        break;
    }

    if (isPrime) {
        Console.Write("{0} ", i);
        Console.ReadLine();
    }
}
于 2012-11-07T18:06:56.943 回答
1

你不能像这样做一个for循环吗?

for (int i = 2; i < myInt; i++)
{
    if(myInt % i == 0)
        //Do something with it.
}
于 2012-11-07T17:43:51.687 回答
1

使用试除法进行整数分解的基本算法从 2 开始尝试每个可能的因子,如果它除n,则输出因子,减少n并搜索下一个因子;请注意,如果f除以n则不会递增,因为它可能会再次除以减少的n。当f大于n的平方根时,循环停止,因为此时n必须是素数。这是伪代码:

function factors(n)
    f := 2
    while f * f <= n
        if n % f == 0
            output f
            n := n / f
        else
            f := f + 1
    output n

有更好的方法来分解整数,但这应该让你开始。当你准备好更多时,我谦虚地在我的博客上推荐这篇文章。

于 2012-11-07T18:26:45.127 回答