XDU 1022 數論篩法 字首和

2022-08-02 21:36:13 字數 970 閱讀 3613

解法一:數論篩法+字首和

//

其實題目中f[n]的值可理解為存在多少個整數對使a*b<=n

#include#define n 1007

#define maxn 1000005

using

namespace

std;

intf[maxn];

void procede(int n)//

預處理

}//此時f[n]理解為表示n的約數的個數,亦可以理解為表示存在多少對整數對(a,b)恰好滿足a*b=n f[1]=1,f[2]=2,f[3]=2,f[8]=4,f[10]=3

for(int j=1;j)

//f[n]此時表示存在多少對整數對(a,b)滿足a*b<=n,即求了一次字首和,f[1]=1,f[2]=3,f[3]=5

for(int j=1;j)}//

此時f[n]表示題目中的sum(1,n),即又求了一次字首和,f[1]=1,f[2]4,f[3]=9

intmain()

}

解法二:數論篩法+樹狀陣列

#include#include

#define maxn 1000005

#define n 1007

using

namespace

std;

inta,b,c[maxn],f[maxn];

/*int f(int x)

*/效率太低tle

int lowbit(int

x)void add(int i,intd)}

int sum(int

i)

return s%n;

}void precede(int

n) }

for(int j=1;j)}//

數論篩法效率不會tle

intmain()

}

數論 埃氏篩法

這學期的離散數學課程學了一點初等數論,其中的埃氏篩法當時課上沒有太懂,課後看了 挑戰程式設計競賽 一書終於弄懂了。這本書確實很好!演算法簡潔優美。如果只對乙個整數進行素性測試,通常o n 的演算法就足夠了。但如果要對許多整數進行素性測試,則有更為高效的演算法,其中就包括埃拉託斯特尼篩法,簡稱埃氏篩法...

數論基礎 埃氏篩法 區間篩法(模板)

區間篩法 求n之前的所有素數 原理1.如果採用利用文章中第乙個o sqrt n 的演算法,進行n次迴圈即可得到答案。顯然,這樣o nsqrt n 肯定超時,所以我們需要進行優化。2.如果我們判斷出a是素數,那麼我們就可以確定a的倍數都是合數。因此可以將這些倍數刪除,這樣就可以去掉一些不必要的判斷。3...

在數論中使用篩法

篩法是乙個很方便,很快捷的方法,金典的演算法很多都是使用曬法來解決的。比如金典的求尤拉函式,求莫比烏斯函式,以及一些篩素數等。但是什麼型別的題目可以使用自己自創的篩法呢。1.最典型的函式型別 f x d xg x,d 這種型別的函式是金典的篩法使用。你可以這樣想,篩法的本質是列舉每個數的同時找到這個...