POJ2115:C Looooops(一元线性同余方程)
题目: http://poj.org/problem?id=2115
要求: 会求最优解,会求这d个解,即(x+(i-1)*b/d)modm;(看最后那个博客的链接地址)
前两天用二元一次线性方程解过,万变不离其宗都是利用扩展欧几里得来接最优解。
分析:
数论了解的还不算太多,解的时候,碰到了不小的麻烦。
设答案为x,n = (1<<k), 则 (A+C*x) % n == B
即 (A+C*x) ≡ B (mod n)//-----结果显而易见两边的(a+cx)%n==b<n
化简得 C*x ≡ (B-A) (mod n)//----同余模的性质a-c==b-c(mod n)在a==b(mod n)的前提下
自己晕了,还是掌握的不好,和之前的代码一样,只是推导的方法多了一种。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
long long a,b,c,k;
long long x1,x2;
long long gcd(long long a,long long b)
{
return b==?a:gcd(b,a%b);
}
void extend(long long A,long long B,long long &x1,long long &y1)
{
if(B==)
{
x1=;
y1=;
return ;
}
extend(B,A%B,x1,y1);
long long t=x1;
x1=y1;
y1=t-(A/B)*y1;
}
int main()
{
while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)!=EOF)
{
if(a==&&b==&&c==&&k==) break;
long long A=c;
long long B=pow(,k);
long long C=b-a;
long long temp=gcd(A,B);
if(C%temp)
{
printf("FOREVER\n");
continue;
}
A/=temp;
B/=temp;
C/=temp;
extend(A,B,x1,x2);
long long t=(C*x1%B+B)%B;
printf("%lld\n",t);
}
return ;
}
一元线性同余方程:形如 ax==b%m;
解法:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html#2985941
POJ2115:C Looooops(一元线性同余方程)的更多相关文章
- POJ2115 C Looooops(线性同余方程)
		无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程: $$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} ... 
- POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]
		先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/68 ... 
- HDU3579:Hello Kiki(解一元线性同余方程组)
		题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ... 
- HDU1573:X问题(解一元线性同余方程组)
		题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题 ... 
- HDU1573 X问题【一元线性同余方程组】
		题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1573 题目大意: 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X ... 
- NEFU 84 - 五指山 - [exgcd求解一元线性同余方程]
		题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=84 Time Limit:1000ms Memory Limit ... 
- POJ2891:Strange Way to Express Integers(解一元线性同余方程组)
		写一下自己的理解,下面附上转载的:若a==b(modk);//这里的==指的是同余,我用=表示相等(a%k=b)a-b=kt(t为整数)以前理解的错误思想:以前认为上面的形式+(a-tb=k)也是成立 ... 
- 【POJ 2891】Strange Way to Express Integers(一元线性同余方程组求解)
		Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ... 
- 数论之同余性质 线性同余方程&拔山盖世BSGS&中国剩余定理
		先记录一下一些概念和定理 同余:给定整数a,b,c,若用c不停的去除a和b最终所得余数一样,则称a和b对模c同余,记做a≡b (mod c),同余满足自反性,对称性,传递性 定理1: 若a≡b (mo ... 
随机推荐
- Spring------SpringBoot中注解
			转载: http://www.tuicool.com/articles/bQnMra 
- RMQ LAC 入门
			RMQ RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大) ... 
- MySQL性能优化(六)-- using filesort,in和exists,慢查询,mysqldumpslow
			一.order by产生using filesort详解 1.首先建表和索引(以下使用的sql版本是5.5.54) /*课程表*/ create table course( id int primar ... 
- Linux alias 命令
			alias命令用于查看或设置命令别名,但仅作用于该次登陆的会话,若要永久使用别名,可在 ~/.bashrc 中设定别名 [root@localhost ~]$ alias // 查看别名 [root@ ... 
- Windows域的相关操作
			一.windows域账户组操作: net group /domain #查看所有组 net group GROUP-NAME /domain #查看某一个组 net group GROUP-NAME ... 
- Dell、IBM服务器配置远程管理卡
			author: headsen chen date: 2018-10-09 14:12:32 1,IBM的服务器: 需要在bios里边进行配置,具体配置如下: , 开机画面过完之后,按F1进入bio ... 
- 【BZOJ1879】[Sdoi2009]Bill的挑战 状压DP
			[BZOJ1879][Sdoi2009]Bill的挑战 Description Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含 ... 
- ThinkPHP流程控制!
			IF判断: 在thinkphp 中不能使用 <> 这样的尖括号: <if condition='表达式'> <elseif condition='表达式'/> &l ... 
- map容器结构体离散化
			小数坐标离散化: #include"string.h" #include"stdio.h" #include"iostream" #incl ... 
- json包的不同导致结果不同
			json包的不同导致结果不同 引入如下json jar包 import org.json.JSONArray; 2 import org.json.JSONObject; 代码: JSONObject ... 
