マツケンのマインド

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

プロジェクトオイラー 問題21

プロジェクトオイラーの問題21をC言語で解きました!

問題はこちら↓
http://odz.sakura.ne.jp/projecteuler/?Problem+21


番号飛んでるやん!って思ったそこのあなた!そうです(笑)
見たところすぐに書けそうだったので解きました!
 

アルゴリズム
・1から10000までの数を調べていく。
・関数sumyakuに調べる数を渡し、約数の和を返してもらう。
友愛数であるかの判定はif文で。

 

ソースコード

#include<stdio.h>
#include<time.h>
#define MAXNUMBER 10000

int sumyaku(int n){//整数を受け取り、その整数の約数を足して言った数をint型の整数sumに入れて返す関数
    int sum = 0;
    for(int i = 1; i <= n/2; i++)//捜索範囲を半減
    if(n % i ==0) sum += i;
    return sum;
}

int main(void){
    int b, sum = 0;
    clock_t start_clock, end_clock;
    start_clock = clock();

    for(int i = 1; i < MAXNUMBER; i++){
        b = sumyaku(i);//関数sinyakuに入れて戻ってきたものをint型の変数bに格納
        if(sumyaku(b) == i && i!= b)//題意に沿っているかの確認
        sum += i;
        }

    printf("%d", sum);

    end_clock = clock();
    printf("\n");
    printf("経過時間%f秒\n", (double)(end_clock - start_clock) / CLOCKS_PER_SEC);

    return 0;
}

<実行結果>
31626
経過時間0.247000秒

経過時間に納得のいかない...