题目:http://acm.timus.ru/problem.aspx?space=1&num=1132

题意:就是给出方程,p为素数,求在区间内的解。

这个思路很简单,详见:http://algo.ftiasch.com/tag/number-theory/

一开始TLE,原因是我用了二分加法,以后记住:二分加法是适合很大数的,比较小的数就直接乘,不然数据多了可能TLE。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h> using namespace std;
typedef long long LL; LL quick_mod(LL a,LL b,LL m)
{
LL ans=1;
a%=m;
while(b)
{
if(b&1)
{
ans=ans*a%m;
b--;
}
b>>=1;
a=a*a%m;
}
return ans;
} struct T
{
LL p,d;
}; LL w; //二次域乘法
T multi_er(T a,T b,LL m)
{
T ans;
ans.p=(a.p*b.p%m+a.d*b.d%m*w%m)%m;
ans.d=(a.p*b.d%m+a.d*b.p%m)%m;
return ans;
} //二次域上快速幂
T power(T a,LL b,LL m)
{
T ans;
ans.p=1;
ans.d=0;
while(b)
{
if(b&1)
{
ans=multi_er(ans,a,m);
b--;
}
b>>=1;
a=multi_er(a,a,m);
}
return ans;
} //求勒让德符号
LL Legendre(LL a,LL p)
{
return quick_mod(a,(p-1)>>1,p);
} LL mod(LL a,LL m)
{
a%=m;
if(a<0) a+=m;
return a;
} LL Solve(LL n,LL p)
{
if(p==2) return 1;
if (Legendre(n,p)+1==p)
return -1;
LL a=-1,t;
while(true)
{
a=rand()%p;
t=a*a-n;
w=mod(t,p);
if(Legendre(w,p)+1==p) break;
}
T tmp;
tmp.p=a;
tmp.d=1;
T ans=power(tmp,(p+1)>>1,p);
return ans.p;
} int main()
{
int t,p,n,a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&p);
n%=p;
a=Solve(n,p);
if(a==-1)
{
puts("No root");
continue;
}
b=p-a;
if(a>b) swap(a,b);
if(a==b)
printf("%d\n",a);
else
printf("%d %d\n",a,b);
}
return 0;
}

Timus1132(二次剩余方程求解)的更多相关文章

  1. MATLAB 符号变量表达式 + 方程求解

    源代码见文末 部分源代码: % 符号变量 两种表达方式 a=sym('a'); class(a); syms b; b; % 符号常量 c=sym('); c; % 符号表达式 三种表达方式 f1=' ...

  2. 洛谷——P1689 方程求解

    P1689 方程求解 题目描述 给一个方程,形如X+Y=Z或X-Y=Z.给出了其中两个未知数,请求出第三个数.未知数用‘?’表示,等式中也许会出现一些多余的空格. 输入输出格式 输入格式: 一行,方程 ...

  3. 洛谷 P1689 方程求解

    P1689 方程求解 题目描述 给一个方程,形如X+Y=Z或X-Y=Z.给出了其中两个未知数,请求出第三个数.未知数用‘?’表示,等式中也许会出现一些多余的空格. 输入输出格式 输入格式: 一行,方程 ...

  4. FESTUNG模型介绍—1.对流方程求解

    FESTUNG模型介绍-1.对流方程求解 1. 控制方程 对流问题中,控制方程表达式为 \[\partial_t C + \partial_x (u^1 C) + \partial_y (u^2 C) ...

  5. 【来自媳妇的需求】PHP实现随机数和方程求解

    话说2015.11.06 ,北京下了第一场雪.16年的今天没下雪,但是雾霾还是不小的,帮媳妇整理她工作时,出现了下面的需求,便想到使用PHP来写程序来进行求解. [需求] 1. 给出一个平均值X,反过 ...

  6. ZOJ 3329 One Person Game (经典概率dp+有环方程求解)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3329 题意:现在有三个骰子,分别有k1,k2和k3面,面上的点就是1~ki ...

  7. HDU 3292 【佩尔方程求解 && 矩阵快速幂】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...

  8. C语言之基本算法26—佩尔方程求解

    //穷举法! /* ====================================================== 题目:求佩尔方程x*x-73*y*y=1的解. =========== ...

  9. 【t050】方程求解

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 要求Xi(i = 1,2,3,4)是一个[-T..T]中的整数,满足方程AX1 + BX2 + CX3 ...

随机推荐

  1. android 23 启动带2个Categories值的预定义acticity和桌面activity

    mainActivity.java package com.sxt.day04_07_twoaction; import android.os.Bundle; import android.app.A ...

  2. linux 最大文件描述符fd

    使用四种框架分别实现百万websocket常连接的服务器 著名的 C10K 问题提出的时候, 正是 2001 年.这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务 ...

  3. Java 自带MD5加密 Demo

    package demo; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; pub ...

  4. Java基础知识强化之集合框架笔记26:LinkedList的特有功能

    1. LinkedList的特有功能: (1)添加功能  public  void  addFirst(Object   e)  public  void  addLast(Object   e) ( ...

  5. jQuery Capty 图片标题插件

    jQuery Capty是可以为图片添加漂亮的字幕的插件 文件包含: <link type="text/css" rel="stylesheet" hre ...

  6. mvc4+jquerymobile页面加载时无法绑定事件

    问题:在view里写js,在页面第一次加载完成后,无法触发事件, 如:按钮click事件,已经在$(function(){  添加了click });但就是无法触发,必须刷新下才可以. 原因分析: 主 ...

  7. 利用SQLiteOpenHelper创建数据库,进行增删改查操作

    Android中提供SQLiteOpenHelper类,在该类的构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象.继承和扩展SQLiteOpenHelper类主要做的工作就是重写 ...

  8. angularjs-ngModel 控制页面的宽度

    js NiDialog.open({ windowClass: '', size:'elements', backdrop: 'static', keyboard: false, templateUr ...

  9. For and While loop choice.

    /* Difference between 'for' and 'while'. We can transform everything between 'for' and 'while'. if t ...

  10. Oracle 左连接、右连接、全外连接、(+)号作用、inner join(等值连接) (转载)

    Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer Join) oute ...