※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「プロジェクトオイラー問123」の編集履歴(バックアップ)一覧に戻る

プロジェクトオイラー問123 - (2014/03/08 (土) 06:46:32) の最新版との変更点

追加された行は青色になります。

削除された行は赤色になります。

+http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20123
+
 *Problem 123 「素数の自乗で割った余り」 †
 pn を n 番目の素数とする. (p1 = 2, p2 = 3, ...) r を (pn - 1)n + (pn + 1)n を pn^2 で割った余りとする.
 
-例えば, n = 3 のとき, p3 = 5 であり, 43 + 63 = 280 ≡ 5 mod 25.
+例えば, n = 3 のとき, p3 = 5 であり, 4^3 + 6^3 = 280 ≡ 5 mod 25.
 
 余り r が 10^9 より大きくなる n の最小値は 7037 である.
 
 余り r が 10^10 より大きくなる最初の n を求めよ.
+
+解法
+愚直に小さいほうから試す以外思いつきません。
+何か賢い解法でもあるものでしょうか?
+ 
+
+ not_prime(N):-
+ 	between(2,N,D),
+ 	(D*D>N->!,fail;true),
+ 	N mod D=:=0,
+ 	!.
+ is_prime(N):-not(not_prime(N)).
+ 
+ 
+ search(N,No):-
+ 	is_prime(N),
+ 	!,
+ 	No1 is No+1,
+ 	N1 is N+1,
+ 	(No1 mod 2=:=0->M is 2;M is 2*N*No1),
+ 	(M>10^10->!,write(No1);search(N1,No1)).
+ search(N,No):-
+ 	!,
+	N1 is N+1,
+ 	search(N1,No).
+ main123:-
+ 	search(2,0).