任何一个大于6的偶数均可以表示为两个素数之和,例如6=3+3,10=3+7,...18=7+11,要求将6--100之间的偶数都表示成两个素数之和,打印时一行打印5组有人有时间吗?给段源程序吧

解决方案 »

  1.   

    你可以考虑逆过来做1。找出1 ~ 100中的素数,并存入一数组;2。利用循环方法将数组的一个元素与自己以及它后面的元素相加,如果结果满足6=<int<=100
    且是偶数则输出这条运算式;
      

  2.   

    procedure TForm1.gdbh(iBegin,iEnd: Integer);
    var
      i,j: Integer;
    begin
      for i := (iBegin div 2) to (iEnd div 2) do
      begin
        for j := 2 to i do
        begin
          if IsPrime(j*2-1){} then
          begin
            if IsPrime(i*2-(j*2-1)) then
            begin
              Memo1.Lines.Add(IntToStr(i*2)+'='+IntToStr(j*2-1)+'+'+IntToStr(i*2-(j*2-1)));
              Break;
            end;
          end;
        end;
      end;
    end;function TForm1.IsPrime(iNum: Integer): Boolean;
    var
      i,j,iMid: Integer;
    begin
      Result := True;
      iMid := Round(Sqrt(iNum));
      for i := 2 to iMid do
      begin
        if iNum mod i = 0 then
        begin
          Result := False;
          Break;
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      gdbh(6, 100);
    end;
      

  3.   

    var
      n, p: integer;
    begin
      for p := 3 to n - 3 do
        if isprime(p) then
           if isprime(n - p) then
             write(n, p, n - p);
    end;function isprime(p: integer): boolean;
    var
      i: integer;
    begin
      if (p mod 2 = 0) then
         result := False
      else 
         begin
           i := 3;
           while (i * i <= p)
              begin
                if (p mod i = 0) then
                   begin
                     result := false;
                     exit;
                   end;
                i := i + 2;
              end;
           result := true; 
         end;
    end;
      

  4.   

    yaos(可以不吃不喝不能没有网络·无心人) 的isprime算法有误,
    除了语法错误之外,还有逻辑错误,不信试下isprime(1)=true;
    isprime(2)=false
      

  5.   

    不好意思,我的isprime(1)也等于true;修订于下:
    function TForm1.IsPrime(iNum: Integer): Boolean;
    var
      i,j,iMid: Integer;
    begin
      if Abs(iNum) < 2 then //加上判断条件
        Result := False
      else
        Result := True;
      iMid := Round(Sqrt(iNum));
      for i := 2 to iMid do
      begin
        if iNum mod i = 0 then
        begin
          Result := False;
          Break;
        end;
      end;
    end;
      

  6.   

    function TForm1.IsPrime(iNum: Integer): Boolean;
    var
      i,j,iMid: Integer;
    begin
      iNum := Abs(iNum);
      if iNum < 2 then //加上判断条件
        Result := False
      else
        Result := True;
      iMid := Round(Sqrt(iNum));
      for i := 2 to iMid do
      begin
        if iNum mod i = 0 then
        begin
          Result := False;
          Break;
        end;
      end;
    end;