?? 1397 goldbach's conjecture.cpp
字號:
/*
1397 Goldbach's Conjecture
Time Limit : 1000 ms Memory Limit : 32768 K Output Limit : 256 K
968 MS 316 KB 1438 B
GUN C++
*/
//暴力窮舉,注意要優化
//可用篩法
#include <iostream.h>
#include <stdio.h>
#include <math.h>
using namespace std;
const int nMax=32768;
const int pMax=3600;
int prime[pMax]={0},now;
bool isPrime(int num)
{
int rnum,ca;
rnum=(int)sqrt(num);
for(ca=2;ca<=rnum;ca++)
{
if(num%ca==0)
{ return false;}
}
return true;
}
int divFind(int num)
{
int low=0,high=now,mid;
while(high-low>=0)
{
mid=(low+high)/2;
if(prime[mid]==num)
return mid;
else
{
if(prime[mid]>num)
{ high=mid-1;}
else
{ low=mid+1;}
}
}
return -1;
}
int main()
{
int n,ca,pos,count,temp;
for(ca=2,now=0;ca<=nMax;ca++)
{
if(isPrime(ca))
{ prime[now]=ca;now++;}
}
now--;
while(scanf("%d",&n) && n!=0)
{
temp=(int)ceil(n/2.0);
count=0;
for(pos=0;pos<=now;pos++)//防止重復的計算
{
if(prime[pos]>temp)
break;
if(prime[pos]==temp)//相等時,是一種答案
{ count++;break;}
}
for(ca=0;ca<pos;ca++)
{
if(divFind(n-prime[ca])>0)
count++;
}
printf("%d\n",count);
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -