D言語版趣味プログラム:6.高次方数の末尾数
D言語版趣味プログラム:6.高次方数の末尾数
(説明:原文はhttp://www.kuqin.com/tiku/c100/参照、C言語版です.本人はD-tango版に書き換えました.D初心者の皆さんと一緒に勉強します.)
に質問
13の13回の方の最後の3桁の数を求めます
問題分析とアルゴリズム設計
本題を解く最も直接的な方法は、13累乗13回で最後の3位を切り取ることです.しかし,計算機で表現できる整数の範囲が限られているため,このような「正しい」アルゴリズムでは正しい結果が得られない.実際,問題は最後の3桁の値のみを要求し,13の13次方の完全な結果を要求する必要は全くない.乗算の法則を研究すると,積の最後の3ビットの値は乗数と被乗数の後3ビットにのみ関係し,乗数と被乗数の高位とは無関係であることが分かった.この法則を利用すれば,プログラムを大幅に簡略化することができる.
(説明:原文はhttp://www.kuqin.com/tiku/c100/参照、C言語版です.本人はD-tango版に書き換えました.D初心者の皆さんと一緒に勉強します.)
に質問
13の13回の方の最後の3桁の数を求めます
問題分析とアルゴリズム設計
本題を解く最も直接的な方法は、13累乗13回で最後の3位を切り取ることです.しかし,計算機で表現できる整数の範囲が限られているため,このような「正しい」アルゴリズムでは正しい結果が得られない.実際,問題は最後の3桁の値のみを要求し,13の13次方の完全な結果を要求する必要は全くない.乗算の法則を研究すると,積の最後の3ビットの値は乗数と被乗数の後3ビットにのみ関係し,乗数と被乗数の高位とは無関係であることが分かった.この法則を利用すれば,プログラムを大幅に簡略化することができる.
module qwcx6;
import tango.io.Stdout,
tango.util.Convert,
tango.io.Console;
import tango.stdc.stdlib;
int main()
{
int i,x,y,last=1; /* last X Y */
Stdout(" x y
x:").newline;
x = to!(int)(Cin.get());
Stdout(" y:").newline;
y = to!(int)(Cin.get());
for(i=1;i<=y;i++) /*X Y */
last=last*x%1000; /* last X 1000 , */
Stdout.formatln("{}^{} : {:d3}",x,y,last%1000); /* */
system("pause");// “ ”,
return 0;
}