Problem 6
今回は簡単だな。まだまだ序盤だからか。
最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。
Problem 6 - PukiWiki
1² + 2² + ... + 10² = 385
(1 + 2 + ... + 10)² = 3025
これらの数の差は 3025 - 385 = 2640 となる。
同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。
それぞれ行う関数を作成して実行。
#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だとコードの見た目は冗長だがそれでもこちらの方が高速ではあるのだろうか。