HDU2012 素數判定

2022-07-25 17:15:26 字數 1256 閱讀 8668

對於表示式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(int

x)

if(x==2

)

for(int i=2;i<=x;i++)

}return1;

}

果斷tle啊!

我們仔細觀察,發現√m之後的列舉是不必要的

至於為什麼,我決定讓你們自己思考(逃

其實挺簡單的,仔細想想吧!

於是我們可以得到另乙個玄學正常**

bool check(int

x)  

if(x==2)  

for(int i=2;i<=x;i++)

}return1;

}

時間複雜度o(√n)

可以很愉快地把我們這邊另乙個oj的資料水過去

然後嘞?有沒有更快的?

有!那個方法,就是傳說中的——

尤拉篩法!

(抱歉我的中二病又雙叒叕犯了)

但是我老是寫錯

這裡給出模板,如何應用到這道題裡就看你們的啦!

1 #include2 #include3 #include4 #include5

using

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 對於每個給定範圍內的取值,如果表示式的值都為素數,則...