hdu2136(篩素數,遍歷預處理)

2021-10-02 12:55:29 字數 1139 閱讀 5508

題目大意

就是找出每個數字的所組成的最大的質因素因子,然後輸出這個質因素因子在質數表裡的位置。比如:6,6的最大的質因素因子為3,3在因素表裡為第2位,故輸出2.有個特殊的,就是1輸出0.

思路

利用num[1000005]陣列,從2到1000000的進行遍歷,根據陣列最開始都沒賦值的來處理,比如最開始的是num[2]就將其賦值為1,然後再緊接著從2×2一直到1000000為止,每過2個就將其賦值為1(這個用變數記錄了),結束後之前賦值的變數+1,然後到下一迴圈接著就賦值之前+1的變數了,也就是2,然後從3×2一直到1000000為止,每過3個數就將其賦值為1(就相當於是會覆蓋掉部分之前2所填的數字位),,,然後一直迴圈下去,一直填到999999數字為止。

這樣得到的陣列的值就是代表著最大的質因素因子在質數表的位置了。

注意事項

①「int num[m];」不能放在int main裡面,會導致程式直接崩潰掉

②接受資料那邊的while迴圈裡面不能用「while(cin>>number)」,會導致超時,還是老老實實地用「while(scanf("%d",&number) != eof)」

③下面的**中的

num[i]

= k;

for(

int j = i*

2;j < n;j+

=i)

可換為

for

(int j = i;j < n;j+

=i)

#include

#include

#define m 1000005

#define n 1000000

int num[m]

;//記錄這個數字的最大素數在素數表裡的位置,如:4的最大素數為2,在素數表裡為第一位

void

init()

k++;//加1就是讓這個素數字的值後移,如素數2的位數是第1位,之後的3就是第2位 }}

}int

main()

return0;

}

最大素數因子(hdu2136)

題意 每個素數在素數表中都有乙個序號,設1的序號為0,則 2 的序號為1,3的序號為2,5的序號為3,以此類推。現在要求輸出 所 給定的數n的最大質因子的序號,0分析 應用素數打表法。用flag計算素數的序號,將素數連同他的倍 數一起置為它的素數序號,從小到大迴圈,這樣陣列裡存放的序號就 是最大素數...

HDU 6069 素數篩法

思路 設 n p 1 p 2 p m n p 1 c 1 p 2 c 2 p m c m 則d n k kc 1 1 kc 2 1 kc m 1 d n c 1 1 c2 1 c m 1 則 d n k kc 1 1 kc 2 1 kc m 1 d n k kc 1 1 kc 2 1 k c m 1...

hdu6069 區間素數篩

hdu6069 counting divisors 傳送門題意 計算 sum d i k mod 998244353 其中 d n 表示 n 的約數個數,其中 1 leq l leq r leq 1e12,r l leq 1e6,1 leq k leq 1e7 題解 根據唯一分解定理 n p 1 p...