プロジェクトオイラー 問題3(project euler problem 3)
こんにちは!
Project EulerのProblem-3をC言語で解きました!
問題はこちら↓
見た感じ、単純に書けばよさそうですね!!
<アルゴリズム>
・素数をfor文で探索していくだけでなく、探索範囲も減るように工夫。
・時間計測において、かなり速く計算が終了するので、while文で複数回プログラムを実行して平均をとる。
・変数の型はlong long int
<ソースコード>
/* The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? */ #include <stdio.h> #include <time.h> #define LOOP 10000 // ループ回数の最大値 int main(void){ long long int i; long long int num = 600851475143; long long int ans; clock_t start, end; int loop = 0; // ループ回数 start = clock(); while(loop < LOOP){ // 計測時間がかなり小さいため、繰り返してループ回数で平均をとれるように工夫 num = 600851475143; // 素数の探索 for(i = 3; i <= num; i += 2){ if(num % i == 0){ num /= i; ans = i; } } loop++; } end = clock(); printf("Ans = %lld\n",ans); printf("計測時間%lf[sec]\n", (double)(end - start) / CLOCKS_PER_SEC / loop); return 0; }
<実行結果>
Ans = 6857 計測時間0.000054[sec]
クリア!!