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ビットにのみ関係し,乗数と被乗数の高位とは無関係であることが分かった.この法則を利用すれば,プログラムを大幅に簡略化することができる.
 
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; }