zoukankan      html  css  js  c++  java
  • 【Codeforces 584D】Dima and Lisa

    【链接】 我是链接,点我呀:)
    【题意】

    让你把一个奇数n分成最多个质数的和

    【题解】

    10的9次方以内,任意两个质数之间的差距最大为300 因此可以这样,我们先从i=n-2开始一直递减直到i变成最大的p(p < n)且p是一个质数 这样的话我们就得到了一个质数p,和一个偶数n-p(因为p肯定是一个奇数) 然后n-p<=300,所以我们可以对于剩下的n-p进行暴力求解,分成两个数的和 会发现在小于等于300的时候,总是有成对的质数和为i的

    【代码】

    import java.io.*;
    import java.util.*;
    
    public class Main {
        
        
        static InputReader in;
        static PrintWriter out;
            
        public static void main(String[] args) throws IOException{
            //InputStream ins = new FileInputStream("E:\rush.txt");
            InputStream ins = System.in;
            in = new InputReader(ins);
            out = new PrintWriter(System.out);
            //code start from here
            new Task().solve(in, out);
            out.close();
        }
        
        static int N = 50000;
        static class Task{
            
        	boolean is(int x) {
        		int len = (int)Math.sqrt(x);
        		for (int i = 2;i <=len;i++)
        			if (x%i==0)
        				return false;
        		return true;
        	}
        	
            int n;
            public void solve(InputReader in,PrintWriter out) {
            	n = in.nextInt();
            	int len = (int)Math.sqrt(n);
            	if (is(n)) {
            		out.println(1);
            		out.println(n);
            		return;
            	}
            	//n不是质数,n是奇数
            	for (int i = n-2;i >= 1;i--) {
            		if (is(i)) {
            			int rest = n-i;
            			if (rest==2) {
            				out.println(2);
            				out.print(i+" "+rest);
            			}else {
            				for (int j = 2;j <= rest;j++) {
            					if (is(j)&&is(rest-j)) {
            						out.println(3);
            						out.print(i+" "+j+" "+(rest-j));
            						return;
            					}
            				}
            			}
            			break;
            		}
            	}
            }
        }
    
        
    
        static class InputReader{
            public BufferedReader br;
            public StringTokenizer tokenizer;
            
            public InputReader(InputStream ins) {
                br = new BufferedReader(new InputStreamReader(ins));
                tokenizer = null;
            }
            
            public String next(){
                while (tokenizer==null || !tokenizer.hasMoreTokens()) {
                    try {
                    tokenizer = new StringTokenizer(br.readLine());
                    }catch(IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
            
            public int nextInt() {
                return Integer.parseInt(next());
            }
        }
    }
    
  • 相关阅读:
    C++之类和对象
    PHP程序设计基础
    PHP函数和MySQL数据库
    HTML语言基础
    文件和目录1(文件属性和权限)
    文件IO
    查找
    使用tcpdump抓包实例
    导入模块的2种方法
    ansible启用sudo执行命令
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10491126.html
Copyright © 2011-2022 走看看