主题:请教:验证歌德巴赫猜想
whj8820
[专家分:0] 发布于 2006-04-05 17:44:00
编写一个程序验证歌德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和.用一个SUB 过程对一个数进行验证,在验证过程中,再调用一个判数的过程.要求从6验证到200.
回复列表 (共8个回复)
沙发
moz [专家分:37620] 发布于 2006-04-05 18:43:00
for i%=6 to 200 step 2
for j%=3 to i% step 2
j%=NextZS%(j%)
k%=NextZS%(i%-j%)
if j%+k%=i% then
print i%;"=";j%;"+";k%
exit for
endif
next j%,i%
defint a-z
FUNCTION NextZS% (a%)
static s$
IF Len(s$) = 0 THEN s$=mki$(2)+mki$(3)+mki$(5)+mki$(7)
e = len(s$)\2
z=cvi(right$(s$,2))
SELECT CASE a%
CASE IS <= 2
NextZS% = 2
CASE IS >= z
DO UNTIL z >= a
DO
if e>fre(" ")\4-10 or z>32765 then
print "Error! Out of Memory!"
exit function
endif
z = z + 2
if (z mod 3) and (z mod 5) then
i = 4
q = SQR(z)
DO
k=cvi(mid$(s$,i*2-1,2))
IF z MOD k = 0 THEN EXIT DO
i = i + 1
LOOP UNTIL k > q
end if
LOOP UNTIL k > q
e = e + 1
s$=s$+mki$(z)
'PRINT e, z
LOOP
NextZS% = z
CASE IS < z
l = 1
r = e
DO
m = (r + l) / 2
b=cvi(mid$(s$,m*2-1,2))
IF a > b THEN l = m ELSE r = m
LOOP UNTIL r - l < 2
NextZS%=cvi(mid$(s$,r*2-1,2))
END SELECT
END FUNCTION
最后检讨一下,说实在的,虽然字符串好用,但的的确确是数组的速度更快.
板凳
whj8820 [专家分:0] 发布于 2006-04-06 12:07:00
能不能精简一下.
3 楼
moz [专家分:37620] 发布于 2006-04-06 13:54:00
唉,害人害到底
for i=6 to 200 step 2
yanzheng i
next
sub yanzheng(a)
for j=3 to a/2 step 2
if zhisu(j)<>0 and zhisu(a-j)<>0 then
print a;"=";j;"+";a-j
k=1
exit for
endif
next
if k=0 then print "歌德巴赫猜想不成立于";a
end sub
function zhisu(b)
for i=2 to sqr(b)
if b mod i=0 then exit for
next
zhisu=b mod i
end function
4 楼
diylym [专家分:30] 发布于 2006-07-23 17:54:00
我真佩服 :moz 你太硬了 什么都懂 以后还请多多关照。
5 楼
609802597 [专家分:20] 发布于 2006-08-10 19:02:00
CLS
DO
INPUT N
LOOP UTNIL N>6
K=2
DO WHILE K<N
K=K+1
F= -1
FOR I=2 TO INT(SQR(K))
IF K MOD I=0 THEN F=0
NEXT I
D=N-K
IF D>1 AND F=-1 THEN
F1=-1
FOR I=2 TO INT(SQR(D))
IF D MOD I=0 THEN F1=0
NEXT I
IF F1=-1 THEN PRINT N;"=";K;"+";"D";:END IF
END IF
LOOP
6 楼
gfdsaqw [专家分:0] 发布于 2006-10-18 09:19:00
好啊!
7 楼
oo00oo [专家分:0] 发布于 2007-08-23 12:15:00
哥德巴赫猜想的证明
lxh
一、哥德巴赫猜想原命题:N=P1+P2
N:偶数(N=2*n,n是自然数)
P1,P2:素数
令P1=2*n’1+1,P2=2*n’2+1
二、陈景润先生证明了每一个偶数都是一个素数及两个素数乘积之和其公式可以表达为:
N=P1+P2*P3 (2000年3月18日《参考消息》第7版“科学技术”报道: )
其中N:偶数
P1,P2,P3:素数
三、推理N=P1+P2*P3
1、 当P3=1时,N=P1+P2 ,即歌德巴赫猜想1+1命题成立。
2、当P3=3,5,。。。N-1 时(即为P2的素数倍或者奇数倍时),P2*P3为合数(合数即奇数中能被小于此奇数的奇数整除的数或者能够因式分解为不等于1和他本身的数),那么此命题不能证明“1+1”。
3、需要排除P2*P3为合数的情况,即命题成立。
四、证明歌德巴赫猜想1+1命题。
1、所有偶数都N都可以表示为N=(1+2*K)+(N-1-2K) (K=0,1,.....(N/2-2)),即N可以为以N/2为对称轴相对应的正数奇数和倒数奇数的奇数之和比为此偶数N。
2、“1+1”命题只需找到一对素数的和为此偶数N,则“1+1”命题成立。
3、由于奇数中不仅含有素数还含有合数(奇数中的合数为奇数的奇数倍),根据奇数数轴的对称数之和为此偶数N,那么只需去掉奇数中合数与之对称的奇数,则剩余对称的奇数必定为素数,且对称素数之和为此偶数N。
4、只需证明偶数N中奇数中的剩余的素数个数>=1(N-N/2-(N/2-1)),即N中奇数数轴中合数最大个数的两倍不会超过N/2-1,则“1+1”命题成立 。
5、那么现在统计一下此偶数N中对称奇数数轴中的合数的个数最大值。
如果N超过3的平方则有3因子的奇数中合数的个数为( +1)个((N-1)/3 取整),如果N超过如果超过5的平方则有3因子的奇数中合数的个数为( +1)个((N-1)/3 取整),和有5因子的奇数中合数的个数为个((N-1)/5 取整),推理,如果N超过如果超过(M-2)的平方则有3因子的奇数中合数的个数为( +1)个((N-1)/3 取整),和有5因子的奇数中合数的个数为个((N-1)/5 取整),。。。。。。 和有M-2因子的奇数中合数的个数为个((N-1)/(M-2)取整); 推理,如果N超过如果超过M的平方则有M因子的奇数中合数的个数为 1 , 合并一下如果N超过如果超过M的平方的奇数中合数的个数数列为( +1)++…..+ +1;≡*(++……+)+1;≡*(++……+-(1+3+……+M-4))+1
由上式可得到对称奇数数轴中合数个数的2倍为:
++……+-(1+3+……+M-6)
即当10N24时即(32与52之间)
有3的因子奇数的合数个数为3*3 3*5 3*7 当N=22时( +1)=3,则22内奇数中的合数个数为3,
总上所述,找出任意大于2的偶数是两个素数之和程序代码( VB)
Private Sub CommandButton3_Click()
Dim n As Long
Dim i As Long
Dim j As Long
Dim count As Long
Dim a() As Long
Dim str0 As String
n = CLng(TextBox3.Text)
count = 0
ReDim a(n) As Long
For i = 1 To n - 1
count = 0
If i Mod 2 <> 0 Then
a(i) = i
End If
If i Mod 2 = 0 Then
a(i) = 0
ElseIf i > 7 Then
For j = 3 To i - 2 Step 2
If i Mod j = 0 Then
a(i) = 0
Else
count = count + 1
End If
Next j
If count = j \ 2 - 1 Then
a(i) = i
End If
End If
If a(i) = 0 Then
a(n - i) = 0
End If
Next i
count = 0
For i = 1 To n / 2
If a(i) + a(n - i) = n Then
str0 = str0 & CStr(a(i)) & "+" & CStr(a(n - i)) & " "
count = count + 1
End If
Next i
TextBox3.Text = str0 & "总共有" & count & "组两个素数之和为" & n
Label10.Caption = n & "总共有" & count & "组两个素数之和为" & n
End Sub
8 楼
wzc1996 [专家分:1680] 发布于 2007-08-23 21:50:00
DECLARE FUNCTION isprime! (m!)
CLS
1 INPUT n
IF n MOD 2 = 1 OR n <> INT(n) OR n < 4 THEN 1
FOR i = 2 TO n \ 2
j = n - i
IF isprime(i) THEN
IF isprime(j) THEN PRINT n; "="; i; "+"; j; : END
END IF
NEXT i
END
FUNCTION isprime (m)
FOR i = 2 TO INT(SQR(m))
IF m MOD i = 0 THEN isprime = 0: EXIT FUNCTION
NEXT i
isprime = 1
END FUNCTION
我来回复