POJ2115 C Looooops(数论)
题目链接。
分析:
数论了解的还不算太多,解的时候,碰到了不小的麻烦。
设答案为x,n = (1<<k), 则 (A+C*x) % n == B
即 (A+C*x) ≡ B (mod n)
化简得 C*x ≡ (B-A) (mod n)
设 a = C, b = (B-A)
则原式变为 ax=b.解 x。
到这里,以为求出来 a 的逆, 然后 x = b*a-1。
a 的 逆好求,用《训练指南》上的模板(P122) inv函数.
例如,求 2 模 66536 下的逆, inv(2, 66536) 便可, 但 inv(LL a, LL n) 这个函数的要求就是如果 a 和 n 的最大公约数不为1,则逆不存在。 但样例是有解的。
在网上查了一下,说是《算法导论》(第三版)P555页有解法, 便根据书上的解法解 x 了。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <set> using namespace std; typedef long long LL; void gcd(LL a, LL b, LL &d, LL &x, LL &y) {
if(!b) { d = a; x = ; y = ; }
else { gcd(b, a%b, d, y, x); y-= x*(a/b); }
} int main() {
LL A, B, C, k, n, x, y, d; while(cin >> A >> B >> C >> k) {
if(A == && B == && C == && k == ) break; n = (1LL << k); LL a = C;
LL b = (B-A+n)%n; if(b == ) { printf("0\n"); continue; } gcd(a, n, d, x, y); if(b % d == ) {
LL x0 = (x*(b/d)) % n;
LL minn = (x0%(n/d)+n/d)%(n/d);
cout << minn << endl;
}
else printf("FOREVER\n");
} return ;
}
POJ2115 C Looooops(数论)的更多相关文章
- poj2115 C Looooops(exgcd)
poj2115 C Looooops 题意: 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束. 若在有限次内结束,则输出循环次数. 否则输出死循环. ...
- [暑假集训--数论]poj2115 C Looooops
A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != ...
- POJ2115——C Looooops(扩展欧几里德+求解模线性方程)
C Looooops DescriptionA Compiler Mystery: We are given a C-language style for loop of type for (vari ...
- POJ2115 C Looooops[扩展欧几里得]
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24355 Accepted: 6788 Descr ...
- POJ2115 C Looooops 扩展欧几里德
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2115 题意 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次 ...
- POJ2115:C Looooops(一元线性同余方程)
题目: http://poj.org/problem?id=2115 要求: 会求最优解,会求这d个解,即(x+(i-1)*b/d)modm;(看最后那个博客的链接地址) 前两天用二元一次线性方程解过 ...
- poj2115 C Looooops
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29262 Accepted: 8441 Descr ...
- POJ2115 C Looooops ——模线性方程(扩展gcd)
题目链接:http://poj.org/problem?id=2115 C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- POJ2115 C Looooops(线性同余方程)
无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程: $$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} ...
随机推荐
- 【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一般游戏中都需要记录玩家数据,便于玩家下次登录时 ...
- RESTEasy + JBOSS 7 Hello world application---reference
RESTEasy is JBOSS provided implementation of JAX-RS specification for building RESTful Web Services ...
- EventLoop的设计
1. Event Loop作为一个IO线程,通过IO复用来处理事件 2. 为了保证线程安全,任何需要修改IO线程资源的工作都交给IO线程亲自来做 3. 为了IO线程与其他线程互调,需要设计一个even ...
- Linux shell入门基础(五)
五.bash运算及启动脚本 01.使用bash的命令历史 #history …… #set(显示所有的变量) | grep HIS HISTFILE=/root/.bash_history HISTF ...
- ubuntu 配置Java jdk
本文参考:http://www.cnblogs.com/memory4young/p/ubuntu-install-jdk.html 一.下载 到oracle官方网站下载jdk,博主下载时的版本是8u ...
- css.day.05.eg
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- asp.net中Page.ClientScript.RegisterStartupScript用法小结(转)
//ASP.NET后台页面跳转 Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<scri ...
- 哥的第一个Jquery程序
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- 设置sqlplus的autotrace
1.cd D:\Oracle11gR2\product\11.2.0\dbhome_1\rdbms\admin; --[ORACLE_HOME]/rdbms/admin 2.sqlplus syste ...
- 基于daridus认证的openvpn部署
基于daridus认证的openvpn部署 安装openvpn 1.安装openvpn依赖包 #yum -y install gcc gcc-c++ #yum -y install openssl o ...