とある人が調べものをしていたら、私の名前がでてきたそうです。……どんな調べものだ、とツッコミを入れたくなる自分が悲しいやまだです。
祭なんかやられた日にはでてこないわけにはいかないなぁ、とw
でも、すでに出遅れてますけど orz
1.プログラミング技術を駆使して表現してみる。
……もうこの辺は、他の人に任せますw
2.ネタに走ってみる。
「55」
「1+2+3+4+5+6+7+8+9+10」
……って、もう二番煎じどころか三番煎じ以上……。
3.数式で表現してみる
「((n + 1) × n) ÷ 2」
で和を輪ループを使わずに表現できますね。しかし、これだけでは Jitta さんの二番煎じ。
ここで、Jitta さんのところ では、桁あふれの話がされています。
より高次の桁数を表現するためには、偶数だったら「(n + 1) × (n ÷ 2)」、奇数だったら「((n + 1) ÷ 2) × n」とする、と。詳しくはJitta さんのところ で。
で、ここでも一つ踏み込んでみます。
4.ループも条件分岐も使わずに表現してみる。
もう、どうせなら、偶数や奇数の判断もなしに表現できないかと。
で、考えてみたのが、次の数式(ただし、整数演算)。
「((((n + 1) ÷ 2) × (n ÷ 2)) × 2) + ((n + 1) ÷ 2))」
検証してみます。ミソは、必ず n もしくは n+1 のどちらかが奇数どちらかが偶数になるということ。
n が奇数の場合は、(n + 1) が偶数になる。一方、n は 2 では割り切れないため、小数演算では 0.5 の端数が出る。
すなわち、整数演算では式の前半部分で ((n + 1) ÷ 2) × 0.5 × 2 が切り捨てられることになる。
だから、((n + 1) ÷ 2)) を加算してやれば整数演算での合計値は合うはず。
n が偶数の場合は、(n+1) が奇数になる。(n + 1) は 2 では割り切れないため、小数演算では 0.5 の端数が出る。
すなわち、整数演算では式の前半部分で 0.5 × (n ÷ 2) × 2 が切り捨てられることになる。
だから、(n ÷ 2) を加算してやれば整数演算での合計値は合うはず。
上記の式では、(n ÷ 2) でなく ((n + 1) ÷ 2) となっているが、n が偶数の場合、整数演算では端数切り捨てのためどちらも同じ値になる。
ということでいかがでしょーか?なんか、間違ってます?
あ、演算の最適化はなし、という方向でw