數論 模板 尤拉定理

2021-09-12 14:25:27 字數 3266 閱讀 2869

好久沒寫題解了啊……其實我並沒有頹廢,只是刷樹形dp去了

沒寫題解的原因…

給定a,b,

ca,b,c

a,b,

c,有a,c

≤109

,b≤1

020000000

a,c\leq10^9, b\leq10^

a,c≤10

9,b≤

1020

0000

00,求a bm

od

ca^b\bmod c

abmodc

單組資料版——lg

多組資料版——vjudge

(話說直接做多組資料版就雙倍經驗了嘛……)

就是:aφ(

m)≡1

(mod

m),(

a,m)

=1

a^\equiv 1\pmod m,(a,m)=1

aφ(m)≡

1(mo

dm),

(a,m

)=1尤拉定理可以用於降冪,可以得到ab=

abmo

dφ(m

)+φ(

m)(m

odm)

(b≥m

)a^b=a^+\varphi(m)}\pmod m(b\geq m)

ab=abm

odφ(

m)+φ

(m)(

modm

)(b≥

m)這道題肯定是用降冪公式啦~(廢話)

首先,因為b

bb是乙個高精數,所以我們要用高模低(兩行**……),求出bmo

dφ(c

)b\bmod \varphi(c)

bmodφ(

c),至於φ(c

)\varphi(c)

φ(c)

,可以用o(n

)o(\sqrt)

o(n​

)為什麼有這種**的東西呢?看一下降冪的那一部分,需要滿足b≥m

b\geq m

b≥m,就是有b≥c

b\geq c

b≥c,例如這組資料:2 4 1(lg版),輸出應該是21 mod 4=2,但是這樣做輸出是0,所以如果b≤c

b\leq c

b≤c的話,就可以不用加那個φ(c

)\varphi(c)

φ(c)

了,直接一波上去就好。

1: lg版

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define reg register

#define max(a, b) ( a > b ? a : b )

#define min(a, b) ( a < b ? a : b )

#define abs(a) ( a > 0 ? a : -a )

long

long a, m, p, b;

char c[

20000001];

inline

long

long

phi(

long

long n)}if

(n >

1) res = res / n *

(n -1)

;return res;

}inline

long

long

piow

(long

long a,

long

long b,

long

long mod)

return ans;

}int

main()

cout <<

piow

(a, b + flag * p, m)

<< endl;

}

2:vjudge版

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define reg register

#define max(a, b) ( a > b ? a : b )

#define min(a, b) ( a < b ? a : b )

#define abs(a) ( a > 0 ? a : -a )

long

long a, m, p, b;

char c[

1000001];

inline

long

long

phi(

long

long n)}if

(n >

1) res = res / n *

(n -1)

;return res;

}inline

long

long

piow

(long

long a,

long

long b,

long

long mod)

return ans;

}int

main()

cout <<

piow

(a, b + flag * p, m)

<< endl;

}}

模板 尤拉定理

題目背景 模板題,無背景 題目描述 給你三個正整數,a,m,ba,m,b,你需要求 a b bmod ma bmodm 輸入格式 一行三個整數,a,m,ba,m,b 輸出格式 乙個整數表示答案 輸入輸出樣例 輸入 1 複製 2 7 4 輸出 1 複製 2輸入 2 複製 998244353 12345...

數論 素數 素數相關基礎 尤拉函式與尤拉定理

尤拉定理與尤拉函式在數論方面的應用十分廣泛,幾乎所有的形如a n k 1的東西都可以往上靠。這裡暫時不細說怎麼用,先講基礎內容。1 尤拉函式 尤拉函式 n 表示不超過n且與n互素的正整數的個數 計算公式為 n n 1 1 p1 1 1 p2 其中p1,p2 為n的質因數 2 尤拉定理 若a,n是正整...

尤拉函式 尤拉定理

尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...