洛谷P1579 哥德巴赫猜想(升級版)題解
這是本蒟蒻第一次發題解,望神犇們指正,
原題如圖

現在先分析一下這道題,這道題資料強度不大只有20000,時間限制為1s,記憶體限制為125M,當然如果你想用一般的窮舉來判斷素數的話是會超時的,所以我們在判斷素數上采用埃氏篩法,
\\這是埃氏篩的子函式
void prime(int n)
{
a[0]=a[1]=true;
for(int i=2;i<=n;i++) \\如果一個數是質數,那么這個數的倍數就一定都是合數
if(!a[i]) \\當a[i]為false時說明i為質數
{
b[cnt++]=i;
for(int j=i*i;j<=n;j+=i) \\標記i的倍數為合數
a[j]=true;
}
}
現在附上AC代碼
#include<bits/stdc++.h> \\萬能頭大法好
using namespace std;
bool a[20005];
int b[20005];
int cnt=0;
void prime(int n)
{
a[0]=a[1]=true;
for(int i=2;i<=n;i++)
if(!a[i])
{
b[cnt++]=i;
for(int j=i*i;j<=n;j+=i)
a[j]=true;
}
}
int main (void)
{
int n,flag=0;
scanf("%d",&n);
prime(n);
for(int i=0;i<cnt;i++) \\雙重回圈進行窮盡
{
for(int j=0;j<cnt;j++)
if(!a[n-b[i]-b[j]]&&n-b[i]-b[j]>0)
{
flag=1; \\判斷已經找到符合要求的組合
printf("%d %d %d",b[i],b[j],n-b[i]-b[j]);
break;
}
if(flag) \\如果已經找到符合要求的組合就跳出回圈
break;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/246892.html
標籤:其他
下一篇:作業系統簡答8選4
