ちゃんと計画を立てなさい |
恥ずかしながら、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;
}