HDU 5728 PowMod(數論 遞迴)

2021-07-15 13:15:52 字數 1436 閱讀 1393

description

定義現給出n,m,p,求

input

第一行為一整數t表示用例組數,每組用例佔一行包括三個整數n,m,p

(t<=100,1<=n,m,p<=10^7)

output

對於每組用例,輸出ans

sample input

1 2 6

1 100 9

sample output

4 7

solution

首先求k,需要用到尤拉函式的兩個性質:

1.若(n,m)=1,則有

2.若m是素數且m|n,則有

由這兩個性質有:

記solve(n,m)=

當n=1時,solve(1,m)=

當m=1時,solve(n,1)=

當m=0時,solve(n,0)=0;

這個遞迴求解最多遞迴n的素因子個數層,故可以在至多o(log n)的複雜度內求出k,下面來求ans

此處引入乙個由尤拉定理衍生出的乙個指數迴圈節定理

每次往上冪一層模數就取一次尤拉函式值,由於乙個數的尤拉函式值一定小於自身,所以至多經過o(log p)次操作模數就變成了1,那麼上面的冪就沒有意義了,無限冪就變成了有限冪

code

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

#define maxn 11111111

#define mod 1000000007ll

int euler[maxn],prime[maxn],sum[maxn],res;

void get_euler()

for(int j=0;jif(i%prime[j])

euler[prime[j]*i]=euler[i]*(prime[j]-1);

else

}sum[i]=(sum[i-1]+euler[i])%mod;

}}int solve(int n,int m)

ll mod_pow(ll a,ll b,int p)

return ans;

}int deal(int k,int p)

int main()

return

0;}

2016多校聯賽 hdu 5728 PowMod

題意就是題目上的圖的那個樣子。給定的n是乙個n is a square free number.他是乙個無平方因子數。也就是說他分解質因子後質因子的指數是1.解決這個題分兩步,先說第二步,第二步是 bzoj 3884原題,只是在這個題我們需要算底數是多少而已。引用一下別人的證明 本人巨菜 考慮尤拉定...

hdu 1066 數論 遞迴

hdu 1066 last non zero digit in n 起首引用下leemars的呈報 因為 2 n 是以4為輪迴節的 並且table n 是以10為輪迴節的 所以從10開端 f n 5 table n的尾數 6 f n n 10 2 n 5 mod 4 右邊的式子除了f n 5 外 是...

HDU1215 數論解法

題意 給出乙個正整數n,求出不包含它本身的所有因子的和 思路 運用算術基本定理對這個這個整數進行拆分 整數約數和公式即,sum 1 p1 p1 2 p1 a1 1 p2 p2 2 p2 a2 1 pk pk 2 pk ak 注 該公式計算結果包含整數本身 include include includ...