题目链接:http://poj.org/problem?id=1808

题意:如下。对于素数p,若存在x使得x^2%p=a,则其值为1。否则为-1。现在给出a、p,计算其值。

思路:

若a为正数则利用公式1即可;否则利用公式2、5将-1提出来。跟本题有点关系的是计算x^2%p=a最小的x。在最下面给出代码,modsqr(a,p)函数。

i64 mul(i64 a,i64 b,i64 M)
{
    i64 ans=0;
    a%=M;
    b%=M;
    while(b)
    {
        if(b&1) ans=(ans+a)%M;
        a=(a+a)%M;
        b>>=1;
    }
    return ans;
}

i64 Pow(i64 a,i64 b,i64 M)
{
    i64 ans=1;
    while(b)
    {
        if(b&1) ans=mul(ans,a,M);
        a=mul(a,a,M);
        b>>=1;
    }
    return ans;
}

int judge(i64 d,i64 p)
{
    if(d>0)
    {
        d%=p;
        if(d==0) return 0;
        if(Pow(d,(p-1)/2,p)==1) return 1;
        return -1;
    }
    else
    {
        int coef=((p-1)%4==0)?1:-1;
        d=-d; d%=p;
        if(Pow(d,(p-1)/2,p)==1) return coef;
        else return -coef;
    }
}

i64 d,p;

int main()
{
    int num=0;
    rush()
    {
        scanf("%lld%lld",&d,&p);
        printf("Scenario #%d:\n",++num);
        PR(judge(d,p)==-1?-1:1);
        puts("");
    }
}

  

i64 modsqr(i64 a,i64 n)
{
    if(n==2) return a%n;
    if(Pow(a,(n-1)/2,n)!=1) return -1;
    i64 x;
    if(n%4==3) x=Pow(a,(n+1)/4,n);
    else
    {
        i64 b;
        for(b=1;Pow(b,(n-1)/2,n)==1;b++);
        i64 i=(n-1)/2,k=0;
        do
        {
            i>>=1; k>>=1;
            if((Pow(a,i,n)*Pow(b,k,n)+1)%n==0)
            {
                k+=(n-1)/2;
            }
        }while(i%2==0);
        x=Pow(a,(i+1)/2,n)*Pow(b,k/2,n)%n;
    }
    if(x*2>n) x=n-x;
    return x;
}

  

POJ 1808 Quadratic Residues(平方剩余相关)的更多相关文章

  1. Quadratic Residues POJ - 1808 二次剩余定理

    \(\color{#0066ff}{题目链接 }\) link \(\color{#0066ff}{ 题解 }\) 结论题 \((\frac{a}{p})=a^{\frac{p-1}{2}}\mod ...

  2. POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)

    POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

  3. poj 1269 Intersecting Lines——叉积求直线交点坐标

    题目:http://poj.org/problem?id=1269 相关知识: 叉积求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html什么 ...

  4. 数学:二次剩余与n次剩余

    二次剩余求的是这个东西 如果给定x,再给定若干个大的质数p,如果结果a相同,那么x是完全平方数? 给出别人的二次剩余的代码: /*poj 1808 题意: 判断平方剩余,即判断(x^2)%p=a是否有 ...

  5. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  6. POJ 2262 Goldbach's Conjecture(素数相关)

    POJ 2262 Goldbach's Conjecture(素数相关) http://poj.org/problem?id=2262 题意: 给你一个[6,1000000]范围内的偶数,要你将它表示 ...

  7. POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)

    POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...

  8. 1808:公共子序列 即POJ 1458 Common Subsequence

    1808:公共子序列 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 我们称序列Z = < z1, z2, ..., zk >是序列X = < ...

  9. POJ中和质数相关的三个例题(POJ 2262、POJ 2739、POJ 3006)

    质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.      最小的质数 ...

随机推荐

  1. Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using password: YSE)

    安装mysql后,使用命令登录mysql居然报错了,Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using ...

  2. ASP.NET Web - 回送

    如果希望把更改事件立即传送给服务器,可以把AutoPostback属性设置为true.这样就会使用客户端的JavaScript把窗体数据立即提交给服务器.当然,网络通信量也会增加.使用这个功能时要小心 ...

  3. Oracle 存储过程实例

    create or replace procedure PCREPORT is startDate DATE; --起始如期 nowTime DATE; --当前日期 nowTime2 DATE; - ...

  4. IR的评价指标—MAP,NDCG,MRR

    http://www.cnblogs.com/eyeszjwang/articles/2368087.html MAP(Mean Average Precision):单个主题的平均准确率是每篇相关文 ...

  5. css3 怎么实现像书籍装订线的效果

    .test{ width: 150px; height: 150px; margin: 20% auto; background-color: white; background-image: rep ...

  6. BZOJ 4302 Buildings 解题报告

    这个题好像很有趣的样子. 题目分析: 房间都是 $1\times k$ 的,也就是一条一条的.这个好像比较显然的样子. 一个房间如果要覆盖某个格子$u$,那么这个房间的面积至少为 $dis(u, Bo ...

  7. 【BZOJ】【2729】【HNOI2012】排队

    排列组合+高精度 Orz PoPoQQQ 引用题解: 嗯……学习了一下python= =懒的写高精了 /************************************************ ...

  8. 在IDEA上用python来连接集群上的hive

    1.在使用Python连接hive之前需要将hive中的文件拷贝到自己创建python项目中 cp -r apache-hive--bin/lib/py  /home/jia/Desktop 2.把h ...

  9. 用django-tinymce搞个富文本编辑器

    玩过一圈之后,这些应用慢慢变得简单: 步骤如下: 一,安装: pip install django-tinymce 二,配置APP: INSTALLED_APPS = ( ... 'tinymce', ...

  10. [Hibernate]dynamic-insert和dynamic-update属性

    这二个属性默认情况均为false,你可以通过以下二种方式进行配置使用: 1.Annotation @Entity @Table(name = "stock_transaction" ...