110,538
社区成员
发帖
与我相关
我的任务
分享
static List<int> GetPrimes(int m)
{
List<int> primes = new List<int>();
for (int i = 2; i <= m; )
{
if (IsPrime(i) && m % i == 0)
{
primes.Add(i);
m /= i;
}
else
{
i++;
}
}
return primes;
}
static bool IsPrime(int m)
{
if (m == 2) return true;
if (m == 1 || m % 2 == 0) return false;
for (int i = 3; i * i < m; i += 2)
{
if (m % i == 0) return false;
}
return true;
}
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
/// <summary>
/// get the prime factors of <paramref name="value"/>
/// </summary>
/// <param name="value">the value to get prime factors of</param>
/// <returns>prime factors stored in a list</returns>
static List<uint> GetFactors(uint value)
{
List<uint> factors = new List<uint>(); // list of factors to return
List<uint> primes = new List<uint>(); // prime numbers encountered
uint k = 2; // initial prime number
primes.Add(k); // load the first prime number to the prime list
while (true)
{
if (value == k)
{
factors.Add(k);
break;
}
else if (value % k == 0)
{
factors.Add(k);
value /= k;
}
else
{
bool isPrime;
do
{
k+=2;
isPrime = true;
foreach (uint prime in primes)
{
// k is divisible by 'prime'
// k is not a prime number
if (k % prime == 0)
{
isPrime = false;
break;
}
if (prime > Math.Sqrt(k))
{ // no need to check other numbers
break;
}
}
} while (!isPrime);
primes.Add(k); // add k to the list
}
}
return factors;
}
static void Main(string[] args)
{
Console.Write("Input a number: ");
string input = Console.ReadLine();
uint value = Convert.ToUInt32(input);
List<uint> factors = GetFactors(value);
Console.Write("{0} = ", value);
for (int i = 0; i < factors.Count - 1; i++)
{
Console.Write("{0} * ", factors[i]); // print the factors except for the last
}
Console.WriteLine("{0}", factors[factors.Count - 1]); // print the last factor
}
}
}