にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

Problem 6

今回は簡単だな。まだまだ序盤だからか。

最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。
1² + 2² + ... + 10² = 385
(1 + 2 + ... + 10)² = 3025
これらの数の差は 3025 - 385 = 2640 となる。
同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。

Problem 6 - PukiWiki

それぞれ行う関数を作成して実行。

#include <stdio.h>

#define NUM_MAX 100

int sumsq(int max) {
    int i, ret;
    ret = 0;
    for (i=1; i<=max; i++) {
        ret += i*i;
    }
    return ret;
}

int sum(int max) {
    return (((1+max) * max) / 2);
}

void problem006()
{
    int ans, s;

    /* solve this problem here */
    s = sum(NUM_MAX);
    ans = s*s - sumsq(NUM_MAX);

    printf("%s: answer = %d\n", __FUNCTION__, ans);
}

int main(int argc, char* argv[]) 
{
    problem006();
    return 0;
}

実行結果

$ ./problem006
problem006: answer = 25164150

LLで書いてる人に比べてCだとコードの見た目は冗長だがそれでもこちらの方が高速ではあるのだろうか。