[過去ログ] 高木くんがアクセプトされるまで見守るスレ ★4 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
707
(2): ◆pObFevaelafK [sage] 2023/07/27(木)11:32 ID:Rrvg2yJA(7/11)
>>706 追記
For l = 0 To n - 2
If l <> lSkip Then
p = n ^ 2 + 1 + l
If p Mod lPrimes(l1) = 0 Then
If pFlags(l) Then
Do
l2 = l2 + 1
If rFlags(lPrimes(l1) * l2) Then
s = s & "[" & CStr(p) & "," & lPrimes(l1) * l2 & "]"
lCount = lCount + 1
pFlags(l) = False
rFlags(lPrimes(l1) * l2) = False
Exit Do
End If
Loop
End If
End If
End If
Next
End If

Debug.Print s
Next
Debug.Print CStr(lCount) & " Relations"
End Sub

Sub SetPrimes(ByRef lPrimes() As Long)
lPrimes(1) = 2
...
lPrimes(1000) = 7919
End Sub
718
(1): 132人目の素数さん [sage] 2023/07/27(木)19:33 ID:sLbS3bvR(1/2)
>>707
ObtainRelationの最後
If p Mod lPrimes(l1) = 0 Then
If pFlags(l) Then
Do
l2 = l2 + 1←
If rFlags(lPrimes(l1) * l2) Then←
s = s & "[" & CStr(p) & "," & lPrimes(l1) * l2 & "]"
lCount = lCount + 1
pFlags(l) = False
rFlags(lPrimes(l1) * l2) = False
Exit Do
End If
Loop
End If
End If
End If
Next
End If

Debug.Print s
Next
Debug.Print CStr(lCount) & " Relations"
End Sub

←箇所の部分が、グループのrよりも合成数pの数が余ってしまう場合、ループ上 l2=l2+1
から、rFlags(lPrimes(l1) * l2)が定義できない値をとってエラーが生じるまでループが回る。
これが>r=3以上で後回しにされたpをr=2のグループと紐付ける際、余る可能性に対処しきれていない

試しに、無理やり素数を合成数とみなして、アルゴリズムを回してみよう。
n=3とする
p = n ^ 2 + 1 + l
の箇所を、
p = n ^ 2 + 1 + l
 If p = 11 Then
p = 8
End If
に全置換をかけて、実行すると上記矢印の箇所でrFlags(lPrimes(l1) * l2) が定義できなくなる

これはありえない数を代入したからではなく、

n=4のケースで
p = n ^ 2 + 1 + l
の箇所を、
p = n ^ 2 + 1 + l
 If p = 19 Then
p = 16
End If
素数19をあたかも16としてアルゴリズムを回しても実行可能となることが確認できる。18をr=3、19(16扱いされた)をr=2に対応させれば余らないからである。
降順においてpをスキップしようとしても、スキップしきれない場合、このアルゴリズムは成立しない。

n^2<p<n(n+1)を満たすpがすべて合成数のとき、必ず何かのpが1つ余ることがrの個数から高木君の鳩ノ巣原理からいえるが
その場合、このアルゴリズムはエラーをはく
それはこのアルゴリズムが合成数pが余らないことを前提に組まれているからです。
とりいそぎ
861
(1): 132人目の素数さん [sage] 2023/08/04(金)15:31 ID:BX2PNdr/(5/10)
>>707で省略されてる素数リストを9109まで手打ちしたんか…?
頭が下がる
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.038s