Fansblog 威爾遜定理

2022-05-31 10:48:12 字數 1051 閱讀 3337

題意:給乙個質數\(p\),找小於\(p\)的最大質數\(q\),並求\(q!modp\). \(p,q\epsilon(10^9, 10^)\)

題解:威爾遜定理:乙個數\(n\)若是質數, 則有 \((n - 1)! \equiv n - 1 mod n\). 於是可以先令\(ans = p - 1\), 再對\(p - 1\)到\(q\)的數對\(p\)求逆元。\(p\)到\(q\)之間的距離不會超過300,判定乙個\(10^\)級別的素數可以先用尤拉篩對\(10^\)之內的素數打表(總共約\(6\times10^\)個素數),這樣每次可以用o(\(6\times10^\))的時間判斷這個數是不是素數。(感謝董隊的__int128板子tut)

**:

#include using namespace std;

typedef __int128 ll;

const int maxn = 1e7 + 5;

int prime[maxn];

int visit[maxn];

inline __int128 read()

while(ch>='0'&&ch<='9')

return x*f;

}inline void print(__int128 x)

if(x>9)

print(x/10);

putchar(x%10+'0');

}void prime()

for (int j = 1; j <=prime[0] && i*prime[j] <= maxn; j++) }}

}int p[maxn], cnt;

ll qpow(ll x, ll y, ll mod)

return res;

}bool isprime(ll x)

return true;

}int main()

ans = (ans * qpow(i, n - 2, n)) % n;

i--;

} print(ans);

printf("\n");

}}

威爾遜定理

而要解這個問題,使用窮舉或暴搜的方法顯然不可取。若要優雅而巧妙地解決這個問題,就需要用到乙個關於素數的著名結論 威爾遜定理 wilson s theorem 十八世紀中葉,一位英國法官約翰 威爾遜爵士,發現了數論中一種極為罕見的關係 取從1到某個質數所有連續正整數的乘積,例如從1乘到11,即11的階...

Fansblog(威爾遜定理 大數階乘取模)

原題 題意 給出乙個質數p pp,找出小於p pp的最大的質數n nn,求出n nn的階乘模p pp。p 1e10,1e14 p in 1e10,1e14 p 1e1 0,1e 14 解析 有兩個定理 威爾遜定理 當p pp為質數的時候,p 2 1 p 2 1 p 2 1質數分布密度 素數分布越來越...

威爾遜定理 k p

傳送門 給你乙個素數p,讓你求 k p,其中k為比p小的整數裡最大的素數。例如p 5,則k 3。p 11,則k 7。k k k 1 2 1 input第一行包含乙個整數 t 1 t 10 表示測試樣例的個數.接下來有t行,每行包含乙個素數 p 1e9 p 1e14 output對於每個測試樣例,輸出...