1. 程式人生 > >Timus 1132 Square Root(二次剩餘 解法2)

Timus 1132 Square Root(二次剩餘 解法2)

#include<cstdio>

using namespace std;

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*a*res%p;
    return res;
}

bool Legendre(int a,int p)
{
    return Pow(a,p-1>>1,p)==1;
}

void modsqr(int a,int p)
{
    
int x; int i,k,b; if(p==2) x=a%p; else if(p%4==3) x=Pow(a,p+1>>2,p); else { for(b=1;Legendre(b,p);++b); i=p-1>>1; k=0; do { i>>=1; k>>=1; if(!((1LL*Pow(a,i,p)*Pow(b,k,p)+1
)%p)) k+=p-1>>1; }while(!(i&1)); x=1LL*Pow(a,i+1>>1,p)*Pow(b,k>>1,p)%p; } if(p-x<x) x=p-x; if(x==p-x) printf("%d\n",x); else printf("%d %d\n",x,p-x); } int main() { freopen("data.txt","r",stdin); freopen("aa.txt","
w",stdout); int T; scanf("%d",&T); int a,n; while(T--) { scanf("%d%d",&a,&n); a%=n; if(!Legendre(a,n)) { puts("No root"); continue; } modsqr(a,n); } return 0; }

相關推薦

Timus 1132 Square Root(剩餘 解法2

#include<cstdio> using namespace std; int Pow(int a,int b,int p) { int res=1; for(;b;a=1LL*a*a%p,b>>=1) if(b&1)

Timus 1132 Square Root(剩餘

#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long LL; int w; struct T {

57. Python saltstack 開發(2

http協議 class 方式 clas 調用 官網 創建 分享 tex 回顧上一節:grains 和 pillar 都是定義他們的屬性的grains 定義在minion端(定義完必須重啟minion,才能生效)pillar 定義在master端(無需重啟即可生效)sal

像MIUI一樣做Zabbix開發(2——Zabbix與商業及開源產品的比較分析

Zabbix的特點 Zabbix是一個基於WEB介面的提供分散式系統監控的開源解決方案,通過瀏覽器監視,做到告警分級處理、網路訪問安全可控,該開源平臺在全球有廣泛的使用者基礎,他的特點: 開放性:原始碼全公開,任何使用者都可以編譯和釋出自己的版本。同時,社群和網際網路

[求解剩餘 數論技巧 隨機化] Ural 1132 Square Root

今天要討論的問題是解方程,其中是奇質數。 引理: 證明:由費馬小定理, 引理:方程有解當且僅當 定理:設滿足不是模的二次剩餘,即無解,那麼是二次      剩餘方程的解。

2018.12.19【Timus1132】Square Root(模奇質數剩餘(Cipolla

傳送門 解析: 這道題由於模數一定是質數,所以我們只需要特判掉模數為2的情況,剩下的就是模奇質數二次剩餘了。 關於二次剩餘可以看我的部落格 程式碼: #include<bits/stdc++.h> using namespace std; #d

3月12日 剩餘(shanks解法

演算法原理請wiki:Tonelli–Shanks algorithm,迅速深入理解是不太可能的,與cipola演算法相比,shanks解法更數論一點。 (這個演算法是正常的,但是還是tle) 大概

DZY Loves Fibonacci Numbers CodeForces - 446C (剩餘+線段樹維護等比數列

二次剩餘:   斐波那契通項公式: 先打表求出根號5在模1e9+9意義下的數。 然後就化簡成立區間加上等比數列的形式,維護每段區間加了多少次等比數列就行。 下面我們來看如何維護一個等比數列。假如我對區間[L,R]的加上1,2,4,8...2^n

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求二

【模板】【證明】任意模數下的剩餘求解

什麼是二次剩餘問題 就是求解形如 x 2

N剩餘剩餘

N次剩餘 給定 \(N,a,P\),且 \(P\) 最好為質數 可以算出 \(x^N\equiv a(mod~p)\) 的解 首先可以算出 \(P\) 的原根 \(g\) 解方程 \(g^y\equiv b(mod~p)\),這個直接 \(BSGS\) 設 \(g^z\equiv x(mod~p)\) 那麼

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 *

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) \

cdqz2017-test1-數論 (BSGS + 剩餘 + CRT

#include<map> #include<cmath> #include<cstdio> #include<iostream> using namespace std; map<int,int>mp; int Pow(

《數論概論》讀書筆記 第23章 剩餘

什麼叫二次剩餘,其實就是對於給定的p(p∈P)和n,如果有x滿足x2≡n(modp),那麼n在模p意義下就是二次剩餘。其實就是模意義下能否開根號。 我們先定義Fp,這是一個數域,其實就是0到p−1這p

剩餘--尤拉準則

在數論中,二次剩餘的尤拉判別法(又稱尤拉準則)是用來判定給定的整數是否是一個質數的二次剩餘。 目錄 敘述 若是奇質數且不能整除,則: 是模的二次剩餘當且僅當: 是模的非二次剩餘當且僅當: 以勒讓德符號表示,即為: 舉例 例子一:對於給定數,尋找其為二次剩餘的模數

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