hdu 2879 hehe 積性函式

2022-07-17 11:24:08 字數 1123 閱讀 2511

題目大意:

he[n]為小於n且滿足x^2 = x (mod n)的個數

hehe[n] = he[1]*……*he[n]

解題思路:

1.證明p是素數時he[p]=2.     

x^2=x(mod p)—->p|x(x-1).因為xhe[p^k]=2,證明類似上面的

2.證明對於不同的兩個素數p和q,he[p*q]=4=he[p]*he[q];

首先x=0和x=1是肯定成立的,

現在由x^2=x(mod p*q)

—>p*q|x(x-1)

假設x=k*p[k——>p*q|k*p(k*p-1)

——->q|k(k*p-1)

——->q|(k*p-1)  因為k——->k*p+t*q=1

這裡就變成了這個方程的解,由擴充套件歐幾里得知,這個方程有解,但是k在[0,q-1]之內的解就乙個,所以這裡多乙個解,同理設x=k*p又有乙個解,所以x^2=x(mod p*q)有4個解(x=0 ,x=1 ,x=k*p, x=k*q)

—->he[p*q]=4=he[p]*he[q];

那麼he[p1^r1*p2^r2*……*pk^rk]=2^k然後可以進一步算出hehe只需要算n以內每個素數的倍數的個數.

1 #include2

using

namespace

std;

3 typedef long

long

ll;4

const

int maxn = 10000000+10;5

intprime[maxn];

6bool

is_prime[maxn];

7int sieve(int n)//

返回n以內素數的個數819

}20return

p;21}22

ll pow(ll a, ll b, ll m)

2332 ans %=m;

33return

ans;34}

35int

main()

3648 cout<2, cnt, m)<50return0;

51 }

HDU 1452 因子和 積性函式性質

詳見 include include include define mod 29 using namespace std 求2004 x次方的所有因子對29取餘,可能是由於這一年是閏年才選擇的29 我們可以對2004進行分解 2004 2 2 3 167,很明顯2 2 和 3 和 167 都是相互互...

積性函式求和小記

模板題 p4213 模板 杜教篩 sum ac code 沒開o2優化過了,開了反而沒過,玄學優化233 include include using namespace std using namespace tr1 typedef long long ll const int maxn 5e6 b...

積性函式線性篩

oi中有時需要我們線性篩某些函式,我們篩的主要是積性函式 1st 線性篩素數 include includeusing namespace std const int maxn 1e4 5 int n,prime maxn vis maxn tot void get prime int n int ...