[過去ログ] プログラミングのお題スレ Part13 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
632
(3): 2019/03/12(火)19:26 ID:mUEXbKn8(1)調 AAS
お題
数列a[i]を考える。
a[0] = p
a[i+1] = q * a[i] + r

[入力]
p q r n
(p,q,r,nは整数)
(0≦p,q,r≦99)
(0≦n≦10^10)

[出力]
a[n] mod 13 を求めよ

1 2 0 8
=> 9 (2^8 mod 13)

1 0 99 0
=> 1

1 2 3 2
=> 0 (a[0]=1, a[1]=2*1+3=5, a[2]=2*5+3=13)

1 3 5 10000000000
=> ?
635: 2019/03/12(火)21:07 ID:KPetEW8/(3/4)調 AAS
>>632
マシンパワーがあれば式を入れればいいだけってのはね。。。
解くのに頭使う。解いてみたら案外簡単(アルゴリズムが浮かぶのがキモ)。あえて難しくて最適化の道がある。とかが望ましい。

いあ、無茶振りだろうから、どれか2つ満たせればおkだが。
640
(1): 2019/03/12(火)23:07 ID:+VdOvnK/(2/2)調 AAS
>>632
 https://ideone.com/Y4N5oM  c++

 小さい数値は力技(bf2)で確認してみたが……
642: 2019/03/12(火)23:42 ID:2FAQzMGK(1)調 AAS
>>632 C
https://ideone.com/m3vejt

エクセルとかで実際に数列を計算してみると、長さ12(剰余の数-1)以下の周期になるっぽいのでそれで求められる。
普通に計算するとq * a[i] + r はどんどん大きくなるけど、
毎回 (q * a[i] + r) mod 13としても、計算に影響はないようなので、オーバーフローもせずに計算できる。
だたし、数学的に正しいか保証しかねるが。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s