首页 > 试题广场 >

歌德巴赫猜想说任何一个不小于6的偶数都可以分解为两个奇素数之

[问答题]
歌德巴赫猜想说任何一个不小于6的偶数都可以分解为两个奇素数之和。 对此问题扩展,如果一个整数能够表示成两个或多个素数之和,则得到一个素数和分解式。 对于一个给定的整数,输出所有这种素数和分解式。 注意,对于同构的分解只输出一次(比如5只有一个分解2 + 3,而3 + 2是2 + 3的同构分解式 )。

import java.util.Scanner;
public class a40 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
            for(int i=2;i<=n/2;i++) {
                for(int j=1;j<i;j++) {
                    if(i%j==0) {
                        if(j!=1) {
                            break;
                        }
                    }
                    if(j==i-1) {//j==i-1
                        int x=i;//x设定为第一个数
                        for(int z=n-x;z>n/2;z--) {//后面是从后往前来查找素数的
                            for(int c=1;c<z;c++) {
                                if(z%c==0) {
                                    if(c!=1) {
                                        break;
                                    }
                                }
                                if(c==z-1) {
                                    int h=z;//h为第二个数
                                    if(x+h==n) {
                                        System.out.println(x+"+"+h+"="+n);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        sc.close();
    }
}
发表于 2022-10-16 16:25:22 回复(0)
    public boolean prime(int n){
        if(n<2) return false;
        if(n==2) return true;
        int len=(int)Math.sqrt(n)+1;

        for(int i=2;i<=len;i++){
            if(n%i==0){
                return false;
            }
        }
        return true;
    }
    public void solve(int n){
        int[] a=new int[n];
        int j=0;
        for(int i=2;i<=n;i++){
            if(prime(i)){
                a[j++]=i;
            }
        }
        int l=1<<j;
        int k;
        for(int f:a)
        System.out.println(f);
        for(int i=0;i<l;i++){
            k=i;
            int m=0;
            int h=0;
            String s="";
            while(k>0){
                if((k&1)>0){
                    m+=a[h];
                    if(s=="") {s=s+a[h];}
                        else s=s+"+"+a[h]; 
                    
                }
                h++;
                k>>=1;
            }
            if(m==n){
                System.out.println(s);
            }
        }

    }
发表于 2015-04-20 19:08:55 回复(0)