cdqz2017-test1-數論 (BSGS + 二次剩餘 + CRT)
#include<map> #include<cmath> #include<cstdio> #include<iostream> using namespace std; map<int,int>mp; int Pow(int a,int b,int p) { int res=1; for(;b;a=1LL*a*a%p,b>>=1) if(b&1) res=1LL*res*a%p; return res; } long long Mul(longlong a,int b,long long p) { long long res=0; while(b) { if(b&1) res+=a,res%=p; b>>=1; a+=a; a%=p; } return res; } bool Legendre(int n,int p) { return Pow(n,p-1>>1,p)+1!=p; } int bsgs(int a,int b,int p) { mp.clear();int m=sqrt(p); mp[b]=0; for(int i=1;i<=m;++i) { b=1LL*a*b%p; mp[b]=i; } int am=Pow(a,m,p); int mul=1; for(int i=1;i<=m;++i) { mul=1LL*mul*am%p; if(mp.find(mul)!=mp.end()) return i*m-mp[mul]; } return -1; }int inv(int a,int p) { return Pow(a,p-2,p); } int main() { freopen("theory.in","r",stdin); freopen("theory.out","w",stdout); int x,m,p; scanf("%d%d%d",&x,&m,&p); if(p==2) printf("1"); int y; long long ans; for(int g=1;;++g) { if(!Legendre(x-Pow(g,m,p),p)) continue; y=bsgs(g,(x-Pow(g,m,p)+p)%p,p); if(y==-1 || (y&1)) continue; long long P=1LL*p*(p-1); ans=Mul(1LL*(p-1)*inv(p-1,p)%P,g,P)+1LL*p*(y/2)%P; ans%=P; cout<<ans; return 0; } }
相關推薦
cdqz2017-test1-數論 (BSGS + 二次剩餘 + CRT)
#include<map> #include<cmath> #include<cstdio> #include<iostream> using namespace std; map<int,int>mp; int Pow(
R 語言隱函數作圖(二元二次函數)
sta cit get out 替換 隱函數 blog matlab function 在進行論文寫作時,需要繪制橢圓圖像,隱函數表示如下: a*(x^2)+b*(y^2)+c*(x*y)-d^2 = 0 其中abcd均為已知值 在matlab中用ezplot函數可以很方便
pat 甲級 1078(hash二次探測法)
題目連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805389634158592 思路: 就是有一個二次探測法的公式:hi = (h(x)+i*i)%m; 二次探索:https://blog.csdn.n
jQuery ajax在GBK編碼下表單提交終極解決方案(非二次編碼方法)
前言: 當jquery ajax在utf-8編碼下(頁面utf-8,接收utf-8),無任何問題。可以正常post、get,處理頁面直接獲取正確的內容。 但在以下情況下: GBK -> AJAX POST ->GBK UTF-8 -> AJAX POS
BZOJ5104 Fib數列(二次剩餘+BSGS)
5在1e9+9下有二次剩餘,那麼fib的通項公式就有用了。 已知Fn,求n。注意到[(1+√5)/2]·[(1-√5)/2]=-1,於是換元,設t=[(1+√5)/2]n,原式變為√5·Fn=t-(-1)n·t-1。同乘t並移項,可得t2-√5·Fn·t-(-1)n=0。討論n的奇偶性,BSGS求二
2018.12.30【NOIP訓練】任意模數二次剩餘(高階數論大雜燴)
描述 求解關於xx的方程: x 2
BZOJ 5104 Fib數列(二次剩餘+BSGS)
斐波那契數列的通項: \[\frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})-(\frac{1-\sqrt{5}}{2}))\] 設T=\(\sqrt{5}*N\),\(y=\frac{\sqrt{5}+1}{2}\) 原式可化為\(y^n-(-\frac{1}{y}^n) \
DZY Loves Fibonacci Numbers CodeForces - 446C (二次剩餘+線段樹維護等比數列)
二次剩餘: 斐波那契通項公式: 先打表求出根號5在模1e9+9意義下的數。 然後就化簡成立區間加上等比數列的形式,維護每段區間加了多少次等比數列就行。 下面我們來看如何維護一個等比數列。假如我對區間[L,R]的加上1,2,4,8...2^n
2018.12.19【Timus1132】Square Root(模奇質數二次剩餘)(Cipolla)
傳送門 解析: 這道題由於模數一定是質數,所以我們只需要特判掉模數為2的情況,剩下的就是模奇質數二次剩餘了。 關於二次剩餘可以看我的部落格 程式碼: #include<bits/stdc++.h> using namespace std; #d
2018.12.30【NOIP訓練】【SCOI2018】Numazu 的蜜柑(二次剩餘)
題面傳送門 解析: 直接解方程可以得到 a u
hdu 3589 Jacobi symbol (二次剩餘勒讓德符號)
題目連結 題意:交代一下勒讓德符號與二次剩餘,然後告訴你J(a,n)與L的關係,給定a,n,求J(a,n)。 二次剩餘的原理我並沒有搞太懂= =,想著畢竟不常見,會用板子就好了。在知道如何求勒讓德符號的情況下,只需要將n分解質因數,假設n=p1^k1 * p2^k2 *
[求解二次剩餘 數論技巧 隨機化] Ural 1132 Square Root
今天要討論的問題是解方程,其中是奇質數。 引理: 證明:由費馬小定理, 引理:方程有解當且僅當 定理:設滿足不是模的二次剩餘,即無解,那麼是二次 剩餘方程的解。
《數論概論》讀書筆記 第23章 二次剩餘
什麼叫二次剩餘,其實就是對於給定的p(p∈P)和n,如果有x滿足x2≡n(modp),那麼n在模p意義下就是二次剩餘。其實就是模意義下能否開根號。 我們先定義Fp,這是一個數域,其實就是0到p−1這p
3月12日 二次剩餘(shanks解法)
演算法原理請wiki:Tonelli–Shanks algorithm,迅速深入理解是不太可能的,與cipola演算法相比,shanks解法更數論一點。 (這個演算法是正常的,但是還是tle) 大概
BSGS與二次剩餘
BSGS 我們要求ax≡b(modp)ax≡b(modp)中x的值,其中p為質數,或者a和p互質。 x可以寫成:x=i∗k+jx=i∗k+j,其中k為常數。 那麼ai∗k+j≡bai∗k+j≡b
[斐波那契數列 求解二次剩餘&二次模方程 BSGS] COGS 2114 [CodeChef FN]斐波那契數
我們可以考慮斐波那契的通項公式 換元可以轉化成一個二次方程 根據求根公式求出後 再用BSGS求出指數 注意分奇偶考慮 #include<cstdio> #include<cstdlib> #include<algorithm> #in
Prime Distance(二次篩素數)
led question nds state rip input bsp round easy Description The branch of mathematics called number theory is about properties of
【數論】【二次剩余】【map】hdu6128 Inverse of sum
src main 線性同余方程 tro ++i while sca details srand 部分引用自:http://blog.csdn.net/v5zsq/article/details/77255048 所以假設方程 x^2+x+1=0 在模p意義下的解為d,則
【模板】【證明】任意模數下的二次剩餘求解
什麼是二次剩餘問題 就是求解形如 x 2
小程式地理位置授權邏輯(包括二次授權)
首次授權直接呼叫wx.getLocation();方法,如果使用者點選允許 則在success回撥裡返回地理位置資訊,並且在不清除授權資料的情況下,以後再次呼叫wx.getLocation();方法 不會出彈窗 直接走success