トップページに戻る    次のC++のサンプルへ    前のC++のサンプルへ

Problem48 1000の1000乗の最後の10桁

問題

次の式は、1の1乗 + 2の2乗 + 3の3乗 + ... + 10の10乗 = 10405071317 である。
では、1の1乗 + 2の2乗 + 3の3乗 + ... + 1000の1000乗 の最後の10桁を求めよ。


ソース

#include <stdio.h>

//const __int64 TargetVal =   10LL;
const __int64 TargetVal = 1000LL;

void main()
{
    __int64 SumVal = 0;

    for (__int64 I = 1; I <= TargetVal; I++) {
        __int64 wkSumVal = 1;
        for (__int64 J = 1; J <= I; J++) {
            wkSumVal *= I;
            wkSumVal %= 10000000000LL;
        }
        SumVal += wkSumVal;
        SumVal %= 10000000000LL;
    }
    printf("Answer=%I64d\n",SumVal);
}


実行結果

Answer=9110846700


解説

順に計算しつつ剰余を求めて、不要桁を捨ててます。
__int64型の接尾語としてLLを使い、printf関数の書式指定では、I64dを使ってます。