ぐっちょいばっちょい
http://acm.pku.edu.cn/JudgeOnline/problem?id=1597
ネタバレではあるけど数学が得意な人には見て欲しい。
STEPとMODの2整数が与えられて、擬似乱数を発生させます。
発生ルールは
seed(x+1)=[seed(x)+STEP]%MOD
このとき、発生する乱数の均一さを判定するコードを書いてください。均一さとは、要するにseedを0として、再び0が現れるまで、1から(MOD-1)までのすべての値が1回ずつ現れるかどうかということです。
均一であればぐっちょい、そうでなければばっちょいと叫びます(ウソ)
随分前に書いたときは、MOD回ループの中でルール通り擬似乱数を発生させて途中で0が出たらアウト!みたいなコードを普通に書いてたのですが、さっきなんとなくSTEPとMODの値が互いに素ならぐっちょいなんじゃ・・・と思ってこんなコードを書いたら通りました。これって、数学的に正しいのかナァ。カシコー(゜Д゜)な人教えてたもれ。
main(s,m,d){ for(;~scanf("%d%d",&s,&m);) { for(d=m;s%d|m%d--;); printf("%10d%10d %s Choice\n\n",s,m,d?"Bad":"Good"); } }