-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 に答える