どーも、みつおです。
この問題は手計算でできるのだろうか。
問題
3195 の素因数は 5, 7, 13, 29 である.
600851475143 の素因数のうち最大のものを求めよ.
出典:Problem 3
解答
using System;
namespace Problem3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Solve());
Console.ReadLine();
}
private static long Solve()
{
long ret = 0;
long num = 600851475143;
//素因数分解した場合の最大値(平方根)を求める
long root = (long)Math.Sqrt(num);
//最大値から順に減少させていく
for(long i = root; 0 < i; i--)
{
//割り切れるか判定
if(num % i == 0)
{
//素数か判定
if(IsSosu(i))
{
ret = i;
break;
}
}
}
return ret;
}
private static bool IsSosu(long no)
{
bool ret = true;
//数値が2未満なら素数じゃない、2なら素数
if (no < 2) return false;
else if (no == 2) return true;
//数値が2で割り切れるなら素数じゃない
if (no % 2 == 0) return false;
//奇数でループ
for (int i = 3; i < no; i += 2)
{
//割り切れるので素数じゃない
if (no % i == 0) return false;
}
return ret;
}
}
}
出力
6857