爱因斯坦x 发表于 2022-3-4 20:38:22

求助

我写的哥德巴赫猜想的验证代码怎么只能验证一位数?
def gs (n):
    if n%2==0 and n>2:
      if n==4:
            print(2,2)
      else:
            a=3
            def zs(x):
                global c
                c=0
                for v in range(1,x-1):
                  if not x%v==0:
                        c+=1
            for x in range(n):
                zs(a)
                if c==0:
                  zs(n-a)
                  if c==0:
                        print(a,n-a)
                        break
                  a+=2
    else:
      print('不符合要求!')
gs(int(input('请输入>2的偶数')))
input('回车离开')

wp231957 发表于 2022-3-5 07:01:54

很久以前写的
#include <stdio.h>

int issh(int x)
{
        //返回1 表示是一个素数
    if(x<=1) return 0;
    if(x>1)    for(int i=2;i<x;i++) if(x%i==0) return 0;
    return 1;
}

int main()
{
        int i,j;
        int k=0;
        for(j=4;j<9999;j+=2)
        {
                for(i=1;i<j;i++)
                {
                        if(issh(i)==1 && issh(j-i)==1)
                        {
                                printf("%d=%d+%d\n",j,j-i,i);
                                k++;
                                break;
                        }
                }
                if(k==0) printf("%d不能被分解成2个素数之和.\n",j);
        }
        return 0;
}

爱因斯坦x 发表于 2022-3-5 13:27:42

wp231957 发表于 2022-3-5 07:01
很久以前写的
#include



我的是python语言
你这个是c语言

wp231957 发表于 2022-3-5 16:25:25

爱因斯坦x 发表于 2022-3-5 13:27
我的是python语言
你这个是c语言

转成python 没啥难度吧

import math

def issh(x):
    #返回1 表示是一个素数
    if(x<=1): return 0
    if(x>1):
      for i in range(2,int(math.sqrt(x))+1):
            if x%i==0:
                return 0;
    return 1;

      
for j in range(4,99,2):
    k=0
    for i in range(1,j+1):
       if issh(i) and issh(j-i):
            print("%d=%d+%d\n"%(j,j-i,i))
            k+=1
            break
   
    if(k==0):
      print("%d不能被分解成2个素数之和.\n"%j)
      

爱因斯坦x 发表于 2022-3-5 20:32:34

wp231957 发表于 2022-3-5 16:25
转成python 没啥难度吧

试试

爱因斯坦x 发表于 2022-3-5 20:34:51

额,我要的效果是我输入一个数它来找{:10_266:}

wp231957 发表于 2022-3-5 20:47:08

爱因斯坦x 发表于 2022-3-5 20:34
额,我要的效果是我输入一个数它来找

那不更简单了,连循环都省了

wp231957 发表于 2022-3-7 13:54:20

本帖最后由 wp231957 于 2022-3-12 20:39 编辑

爱因斯坦x 发表于 2022-3-5 20:34
额,我要的效果是我输入一个数它来找

import math

def issh(x):
    #返回1 表示是一个素数
    if(x<=1): return 0
    if(x>1):
      for i in range(2,int(math.sqrt(x))+1):
            if x%i==0:
                return 0
    return 1
      
num=int(input("请输入一个大于4的偶数:"))
if num<4:num=4
if num%2:num+=1
k=0
for i in range(1,num+1):
    if issh(i) and issh(num-i):
      print("%d=%d+%d\n"%(num,num-i,i))
      k+=1
      break
if(k==0):
    print("%d不能被分解成2个素数之和.\n"%num)
   

爱因斯坦x 发表于 2022-3-12 19:47:38

wp231957 发表于 2022-3-7 13:54


有点问题
我输入14
14原可以分成7 7,3 11
但结果是:14不能被分解成2个素数之和

wp231957 发表于 2022-3-12 20:39:44

爱因斯坦x 发表于 2022-3-12 19:47
有点问题
我输入14
14原可以分成7 7,3 11


第10行 是return 1   不知道为啥   网页把那个1给弄没了

爱因斯坦x 发表于 2022-3-12 20:42:56

wp231957 发表于 2022-3-12 20:39
第10行 是return 1   不知道为啥   网页把那个1给弄没了

谢谢,我试试

爱因斯坦x 发表于 2022-3-12 20:50:52

本帖最后由 爱因斯坦x 于 2022-3-12 20:52 编辑

wp231957 发表于 2022-3-12 20:39
第10行 是return 1   不知道为啥   网页把那个1给弄没了

我又改良了一下
import math

def issh(x):
    #返回1 表示是一个素数
    if(x<=1): return 0
    if(x>1):
      for i in range(2,int(math.sqrt(x))+1):
            if x%i==0:
                return 0
    return 1
      
num=int(input("请输入一个大于2的偶数:"))
if num==4:
    print(4=2+2)
else:
    if num%2:num+=1
    k=0
    for i in range(1,num+1):
      if issh(i) and issh(num-i):
            print("%d=%d+%d\n"%(num,num-i,i))
            k+=1
            break
    if(k==0):
      print("%d不能被分解成2个素数之和.\n"%num)
页: [1]
查看完整版本: 求助