1. 程式人生 > >cdqz2017-test1-數論 (BSGS + 二次剩餘 + CRT)

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(long
long 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 甲級 1078hash探測法

題目連結: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求二

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