對於表示式n^2+n+41,當n在(x,y)範圍內取整數值時(包括x,y)(-39<=x
輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x=0,y=0時,表示輸入結束,該行不做處理。
對於每個給定範圍內的取值,如果表示式的值都為素數,則輸出"ok",否則請輸出「sorry」,每組輸出佔一行。
-------------------------分割線-------------------------------------------
這道題其實很簡單(個甚
設f(n)=n^2+n+41
首先我們求出n的數值
然後判定f(n)是否是乙個素數,是的話繼續列舉n,否則輸出「sorry」,並跳出迴圈
於是核心問題變成——如何求乙個數是否為素數
我們先上乙個o(n)的判定程式
bool check(intx)
if(x==2
)
for(int i=2;i<=x;i++)
}return1;
}
果斷tle啊!
我們仔細觀察,發現√m之後的列舉是不必要的
至於為什麼,我決定讓你們自己思考(逃
其實挺簡單的,仔細想想吧!
於是我們可以得到另乙個玄學正常**
bool check(intx)
if(x==2)
for(int i=2;i<=x;i++)
}return1;
}
時間複雜度o(√n)
可以很愉快地把我們這邊另乙個oj的資料水過去
然後嘞?有沒有更快的?
有!那個方法,就是傳說中的——
尤拉篩法!
(抱歉我的中二病又雙叒叕犯了)
但是我老是寫錯
這裡給出模板,如何應用到這道題裡就看你們的啦!
1 #include2 #include3 #include4 #include5using
namespace
std;67
int pri[10000010];8
bool vis[10000010];9
int cnt,t,n=1e7;
1011
void
get_prime()
1220
for(int j=1;j<=cnt&&i*pri[j]<=n;j++)
2127}28
}29 }
HDU 2012 素數判定
problem description 對於表示式n 2 n 41,當n在 x,y 範圍內取整數值時 包括x,y 39 x input 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x 0,y 0時,表示輸入結束,該行不做處理。output 對於每個給定範圍內的取值,如果表示式的值都為素數,則...
hdu 2012 素數判定
problem description 對於表示式n 2 n 41,當n在 x,y 範圍內取整數值時 包括x,y 39 x input 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x 0,y 0時,表示輸入結束,該行不做處理。output 對於每個給定範圍內的取值,如果表示式的值都為素數,則...
hdu 2012 素數判定
problem description 對於表示式n 2 n 41,當n在 x,y 範圍內取整數值時 包括x,y 39 x input 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x 0,y 0時,表示輸入結束,該行不做處理。output 對於每個給定範圍內的取值,如果表示式的值都為素數,則...