マツケンのマインド

とある理系大学生のブログです。基本は勉強とつぶやきとまとめです。

プロジェクトオイラー 問題3(project euler problem 3)

こんにちは!

Project EulerのProblem-3をC言語で解きました!

問題はこちら↓

odz.sakura.ne.jp


見た感じ、単純に書けばよさそうですね!!
アルゴリズム
素数を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]

クリア!!