输入一个整数并得到其主要因素和重复

时间:2012-11-07 17:36:06

标签: c# primes

  

可能重复:
  Prime Factors In 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;
                                }

                        }
                    }
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:1)

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

for (int i = 2; i < myInt; i++)
{
    if(myInt % i == 0)
        //Do something with it.
}

答案 2 :(得分:1)

使用试验分区进行整数分解的基本算法尝试从2开始的每个潜在因子,如果它除以 n ,则输出因子,减少 n ,并搜索下一个因素;请注意,如果 f 除以 n ,则 f 不会递增,因为它可能会再次划分缩小的 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

有更好的方法来计算整数,但这应该让你开始。如果您准备好了更多内容,我会在我的博客上谦虚地推荐这个essay