[B] Project Euler Problem 3

ちゃんと計画を立てなさい

恥ずかしながら、2日かかりました。

反省点は、

  • 変数定義を適当に考えていたこと
  • フラグをなんとなくつけていたこと
  • 進捗の都度、アウトプットで確認していなかったこと
です。
いかにして問題をとくかで、"計画を立てること"を学んだはずなのに・・



問題がshort intの範囲を超えていることは、問題を見た時から感じていました。
したがって、なんとなくdoubleで組んでいました。もちろん解けませんでした。

上記反省点により、改めてソースを組み立てたら、普通に解けてしまいました。

以下は導出メソッドです。


//------------------------------------------------------------------------>
//素因数導出メソッド
//------------------------------------------------------------------------>
long long int prime( long long int num )//------------------------------------>
{
//init----------------------------------->
bool flgPrime;//素因数判定フラグ
long long int ans;


//解はsqrt(num)以下の整数
long int numMax =  (int)ceil( sqrt( (long double) num ) );

std::cout << num << "の素因数判定\n";
//解析の可否
std::cout << "判定の可否:\t";
if( ( numMax - LLONG_MAX ) < 0 ) std::cout << "可能";
else std::cout << "不可能";
std::cout << "\n";
//-------------------------------------->
for( long int i = 3 ; i < numMax ; i = i+2 ){

flgPrime = false;

if( num % i == 0 ){
std::cout << i <<"\t因数である";

flgPrime = true;

for( long long int j = 3 ; j < i ; j = j + 2 ){
if( i % j == 0 ){
flgPrime = false;
}//End if
}//Next j

if ( flgPrime ){
std::cout << "\t 素因数である\n";
ans = i;
}else std::cout << "\t 素因数でない\n";
//End if
}//End if

//else std::cout << i << "\t因数でない\n";
}//next i

return ans;
}