poj 2115 C Looooops
来源:互联网 发布:网易对战平台mac版 编辑:程序博客网 时间:2024/05/16 17:26
x=[(B-A+2^k)%2^k] /C
即 Cx=(B-A)(mod 2^k) 此方程为 模线性方程,本题就是求X的值。
复习扩展欧几里得方程
#include<iostream>#include <stdio.h>using namespace std;//d=ax+by,其中最大公约数d=gcd(a,n),x、y为方程系数,返回值为d、x、y__int64 EXTENDED_EUCLID(__int64 a,__int64 b,__int64& x,__int64& y){ if(b==0) { x=1; y=0; return a; //d=a,x=1,y=0,此时等式d=ax+by成立 } __int64 d=EXTENDED_EUCLID(b,a%b,x,y); __int64 xt=x; x=y; y=xt-a/b*y; //系数x、y的取值是为满足等式d=ax+by return d;}int main(){ __int64 A,B,C,k; while(scanf("%I64d %I64d %I64d %I64d",&A,&B,&C,&k)) { if(!A && !B && !C && !k) break; __int64 a=C; __int64 b=B-A; __int64 n=(__int64)1<<k; __int64 x,y; __int64 d=EXTENDED_EUCLID(a,n,x,y); if(b%d!=0) cout<<"FOREVER"<<endl; else { x=(x*(b/d))%n; //方程ax=b(mod n)的最小解 x=(x%(n/d)+n/d)%(n/d); //方程ax=b(mod n)的最整数小解 printf("%I64d\n",x); } } return 0;}
0 0
- poj 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- poj 2115 C Looooops
- POJ 2115 (C Looooops)
- poj 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- poj 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115--C Looooops
- C++ map的遍历
- 287. Find the Duplicate Number
- 机器学习玩家必收——常用N大算法
- Sharding模式
- (七)计算器实例
- poj 2115 C Looooops
- 十二、java中的抽象类
- LEETCODE--Number of Boomerangs
- Lottie开源动画库使用教程
- 一文读懂机器学习,大数据/自然语言处理/算法
- 第二章:Java基本语法
- Jenkins进行持续集成
- 2016noip练习题3.随机
- python与条件随机场CRF