博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2115 C Looooops扩展欧几里得
阅读量:5987 次
发布时间:2019-06-20

本文共 1242 字,大约阅读时间需要 4 分钟。

题意不难理解,看了后就能得出下列式子:

  (A+C*x-B)mod(2^k)=0

 即(C*x)mod(2^k)=(B-A)mod(2^k)

 利用模线性方程(线性同余方程)即可求解 

 

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;ll exgcd(ll a, ll b, ll&x, ll&y) { if (b == 0) { x = 1; y = 0; return a; } ll r = exgcd(b, a%b, y, x); ll t = x; y = y - a/b*t; return r;}bool modular_linear_equation(ll a, ll b, ll n) { ll x, y, x0, i; ll d = exgcd(a, n, x, y); if (b%d) { printf("FOREVER\n"); return false; } x0 = x*(b/d)%n; //x0为方程的一个特解,可以为正也可以为负。题目要求的是最小的非负数 ll ans; if(x0<0) { ans=x0; for(i = 0;ans<0; i++) ans=(x0 + i*(n/d))%n; } else { ans=x0; ll temp; for(i=0;ans>=0;i++) { temp=ans; ans=(x0 - i*(n/d))%n; } ans=temp; } printf("%I64d\n",ans); return true;}int main(){ //freopen("in.txt","r",stdin); ll A,B,C,k; while(scanf("%I64d%I64d%I64d%I64d",&A,&B,&C,&k)) { if(A==0 && B==0 && C==0 && k==0) break; ll k2=(ll)1<

 

转载于:https://www.cnblogs.com/pach/p/5917418.html

你可能感兴趣的文章
linux 遇见错误Could not get lock /var/lib/dpkg/lock
查看>>
MySQLdump常用命令
查看>>
如何才能正确的关闭Socket连接
查看>>
MongoDB基本操作
查看>>
[转]微擎(微赞)学习之 -- 模块开发:目录结构
查看>>
css 手机适配
查看>>
5个界面效果很炫的JavaScript UI框架
查看>>
根据标准word模板生成word文档类库(开源)
查看>>
Html网页表格结构化标记的应用
查看>>
数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
查看>>
二叉树的层序遍历算法实现
查看>>
Measuring Power Values
查看>>
wince6下载地址
查看>>
UIView+LHQExtension(分类)
查看>>
KiB、MiB与KB、MB的区别
查看>>
Java开发环境配置
查看>>
ASP.NET MVC实现多个按钮提交事件
查看>>
移动端与PHP服务端接口通信流程设计(增强版)
查看>>
Linux 下模拟Http 的get or post请求(curl和wget两种方法)
查看>>
Windows去除快捷箭头
查看>>