求A B的所有約數和 POJ1845

2022-09-01 05:51:08 字數 791 閱讀 4220

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;78

long

long arr1[100000];9

long

long mod=9901;10

11long

long multi(long

long a,long

long

b)12

2324

long

long fsum(long

long p,long

long n) //

遞迴二分求 (1 + p + p^2 + p^3 +...+ p^n)%mod

25 33

34int

main()

3553

if(flag)

5461}62

if(sum!=1)63

68 cout

70return0;

71 }

view code

求乙個數的所有約數和

ans=(1+q1^1+q1^2+......+q1^k1)*(1+q2^1+q2^2+......+q2^k2)*......(1+qn^1+qn^2+......qn^kn)

此題不能用等比數列前n項和,因為要求逆元需要該數與mod互質,而此題中mod過小,該數可能為mod的整數倍,所以要用二分的方法直接求

(1+p+p^2+p^3)=(1+p)*(1+p^2)

複雜度更低的求乙個數的所有約數

最簡單的想法是對所有小於這個數的數逐個遍歷取餘是否為0。但是這種方法的複雜度是o n 的,如下 n int input list1 for i in range 1 n 1 if n i 0 print list1 做題的時候往往這樣複雜度過高,我們將遍歷變成 1,n 0.5 求前一半的約數,求出來...

poj 1845 求A B的約數之和

題意 求a b的所有約數之和 mod 9901。思路 大數模運算。兩個最基本公式 a b c a c b c c 和 a b c a c b c c 用 int64的原因為 n cnt i b cnt i 為a第i個素因子的個數 可能會超int。1 對a進行素因子分解得 a p1 a1 p2 a2 ...

求解乙個數的所有約數之積

首先我們將這個數化成唯一分解的形式,也就是這樣x p1 a1 p2 a2 pn an,我們定義答案為f x 首先我們定義d x 為x的約數的個數,那麼f x x d x 2 由費馬小定理m為素數a m 1 1 mod m a x a x m 1 mod m 其中m為素數,這樣我們就可以在計算中給冪函...