zoukankan      html  css  js  c++  java
  • Goldbach`s Conjecture(素筛水题)题解

    Goldbach`s Conjecture

     

    Goldbach's conjecture is one of the oldest unsolved problems in number theory and in all of mathematics. It states:

    Every even integer, greater than 2, can be expressed as the sum of two primes [1].

    Now your task is to check whether this conjecture holds for integers up to 107.

    Input

    Input starts with an integer T (≤ 300), denoting the number of test cases.

    Each case starts with a line containing an integer n (4 ≤ n ≤ 107, n is even).

    Output

    For each case, print the case number and the number of ways you can express n as sum of two primes. To be more specific, we want to find the number of (a, b) where

    1)      Both a and b are prime

    2)      a + b = n

    3)      a ≤ b

    Sample Input

    2

    6

    4

    Sample Output

    Case 1: 1

    Case 2: 1

    思路:

    水题一只,叫你求n=a+b且a,b都是素数这样的ab的对数。只要素筛一下,就能做了。最好先储存一下10^7以内的素数,数答案时只要到n/2就行了(因为a<=b),不知道不弄会不会超时,可以试一下。

    代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cctype>
    #include<queue>
    #include<cmath>
    #include<string>
    #include<map>
    #include<stack> 
    #include<set>
    #include<vector>
    #include<iostream>
    #include<algorithm>
    #define INF 0x3f3f3f3f
    #define ll long long
    const int N=10000005;	//18
    const int MOD=1000; 
    using namespace std;
    bool prime[N];
    int p[N/10],pn;
    void get_prime(){
    	pn=0;
    	memset(prime,false,sizeof(prime));
    	prime[0]=prime[1]=true;
    	for(long long i=2;i<N;i++){
    		if(!prime[i]){
    			p[pn++]=i;
    			for(long long j=i*i;j<N;j+=i){
    				prime[j]=true;
    			}
    		}
    	}
    }
    int main(){
    	get_prime();
    	int T,n,num=1,ans;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		ans=0;
    		for(int i=0;p[i]<=n/2;i++){
    			if(prime[n-p[i]]==false) ans++;
    		}
    		printf("Case %d: %d
    ",num++,ans);
    	}
    	return 0;
    }



  • 相关阅读:
    android watchdog 学习
    apt-get 使用详解
    study java uiautomator 0731
    关于测试人员的职业发展(转)
    双系统(win7+ubuntu)ubuntu磁盘空间不足时解决方法
    step of install xiaocong/uiautomator
    双系统(win7+ubuntu)ubuntu磁盘空间不足时解决方法
    关于Wubi安装增加容量以及移至真实分区的解决方法!使用LVPM软件
    android uiautomator + shell 网址
    Ubuntu中 JDK的安装和卸载
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9409119.html
Copyright © 2011-2022 走看看