3

プロジェクト euler の問題 6 を解決するための 2 つのコードを次に示します。(100,000)

最初の 10 個の自然数の二乗和は、

1 2 + 2 2 + ... + 10 2 = 385

最初の 10 個の自然数の合計の 2 乗は、

(1 + 2 + ... + 10) 2 = 55 2 = 3025

したがって、最初の 10 個の自然数の二乗和と和の二乗和の差は 3025 − 385 = 2640 です。

最初の 100 個の自然数の 2 乗の和と和の 2 乗の差を求めます。

コード 1:

public class Problem_Six_V2 {

public static void main(String[] args) {

    long limit = 100000;
    long sum = (limit * (limit + 1)) / 2;
    long sumOfSqr = (long)((((2*limit)*limit)+((2*limit)*1)+(1*limit)+(1*1))*limit)/6;
    System.out.println(Math.pow(sum, 2) +" "+ sumOfSqr);
    System.out.println(Math.pow(sum, 2) - sumOfSqr);
}

}

^^^ 出力 = 2.500016666416665E19

コード 2 は次のとおりです。

public class Problem_Six {

public static void main(String[] args) {

    long sum = 0;
    long sumSqr = 0;
    long sumOfSqr = 0;

    for(long i = 1; i <= 100000; i++){
        sum += i;
        sumOfSqr += Math.pow(i,2);
    }
    sumSqr = (long) Math.pow(sum, 2);
    System.out.println(sumSqr +" "+ sumOfSqr);
    System.out.println(sumSqr - sumOfSqr);
}
}

^^ 出力 = 9223038698521425807

私はそれが使用されているタイプと2つに何かだと思いますが、それらは両方のコードで似ているようです..うーん

4

1 に答える 1