回 帖 发 新 帖 刷新版面

主题:请教:验证歌德巴赫猜想

编写一个程序验证歌德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和.用一个SUB 过程对一个数进行验证,在验证过程中,再调用一个判数的过程.要求从6验证到200.

回复列表 (共8个回复)

沙发

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

最后检讨一下,说实在的,虽然字符串好用,但的的确确是数组的速度更快.

板凳

能不能精简一下.

3 楼

唉,害人害到底

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 楼

我真佩服   :moz         你太硬了 什么都懂 以后还请多多关照。

5 楼

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 楼


好啊!

7 楼


 

哥德巴赫猜想的证明 

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 楼

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

我来回复

您尚未登录,请登录后再回复。点此登录或注册