回 帖 发 新 帖 刷新版面

主题:编程验证歌德巴赫猜想该怎样编?

[em18]
编程验证歌德巴赫猜想该怎样编?

回复列表 (共12个回复)

11 楼

#include"stdio.h"
int fun(int c);
void main()
{
    int a,i;
    printf("input a number:");
    scanf("%d",&a);
    for(i=2;i<=a/2;i++)
        if(fun(i))
            if(fun(a-i))
                printf("%d=%d+%d\n",a,i,a-i);
}
int fun(int c)
{
    int b;
    for(b=2;b<c;b++)
        if(c%b==0)
            break;
        if(c==b)
            return 1;
        else
            return 0;
}
不知道对不?

12 楼

DECLARE FUNCTION IsZhiShu& (a&)

CLS
input ;k&
DO while k&
  l&=k&\2
  for i&=2 to l&
    i&=IsZhiShu&(i&)
    j&=k&-i&
    if j&=IsZhiShu&(j&) then exit for
  next
  print "=";i&;"+";j&
  input;k&
LOOP
end

FUNCTION IsZhiShu& (a&)

f% = FREEFILE
OPEN "质数表" FOR RANDOM AS #f% LEN = LEN(a&)

IF LOF(f%) = 0 THEN
     z& = 2
     PUT #f%, 1, z&
     z& = 3
     PUT #f%, 2, z&
END IF

e& = LOF(f%) \ LEN(a&)
GET #f%, e&, z&

SELECT CASE a&
CASE IS <= 2
  IsZhiShu& = 2
CASE IS >= z&
  DO UNTIL z& >= a&
    DO
      z& = z& + 2
      q& = SQR(z&)
      if (z& mod 3) and (z& mod 5) then
        i& = 4
       DO
        GET #f%, i&, k&
        IF z& MOD k& = 0 THEN EXIT DO
        i& = i& + 1
       LOOP UNTIL k& > q&
      end if
    LOOP UNTIL k& > q&
    e& = e& + 1
    PUT #f%, e&, z&
    'LOCATE 5, 5: PRINT e&, z&
  LOOP
  IsZhiShu& = z&
CASE IS < z&

  m& = e& * a& / z&
  If m& < 1 Then m& = 1
  Get #f%, m&, b&
  
  If b& > a& Then
     l& = m& - (b& - a&)\3 -2
     If l& < 1 Then l& = 1
  else
     l&=m&
  End If
  
  If b& < a& Then
     r& = m& + (a& - b&)\3 +2
     If r& > e& Then r& = e&
  else
     r&=m&
  End If
  
  DO
    m& = (r& + l&) / 2
    GET #f%, m&, b&
    IF a& > b& THEN l& = m& ELSE r& = m&
  LOOP UNTIL r& - l& < 2
    GET #f%, r&, b&
  IsZhiShu&=b&
END SELECT
    CLOSE #f%
END FUNCTION

我来回复

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