欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - POJ2115


题意

  对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束。若在有限次内结束,则输出循环次数。否则输出死循环。


题解

  原题题意再次缩略:

  A + xC Ξ B (mod 2k)

  求x的最小正整数值。

  我们把式子稍微变一下形:

  Cx + (2k)y = B-A

  然后就变成了一个基础的二元一次方程求解,扩展欧几里德套套就可以了。

  至于扩展欧几里德(ex_gcd),自己网上学习吧。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
LL A,B,C,k,a,b,c,x,y,g;
LL ex_gcd(LL a,LL b,LL &x,LL &y){
if (!b){
x=1,y=0;
return a;
}
LL gcd=ex_gcd(b,a%b,y,x);
y-=(a/b)*x;
return gcd;
}
int main(){
while (~scanf("%lld%lld%lld%lld",&A,&B,&C,&k)&&(A||B||C||k)){
k=1LL<<k;
//A+xC=B (mod 2^k)
//Cx+(2^k)y=B-A
a=C,b=k,c=(B-A+k)%k;
g=ex_gcd(a,b,x,y);
if (c%g){
puts("FOREVER");
continue;
}
a/=g,c/=g,b/=g;
x*=c,y*=c;
x=(x%b+b)%b;
printf("%lld\n",x);
}
return 0;
}

  

POJ2115 C Looooops 扩展欧几里德的更多相关文章

  1. POJ2115——C Looooops(扩展欧几里德+求解模线性方程)

    C Looooops DescriptionA Compiler Mystery: We are given a C-language style for loop of type for (vari ...

  2. poj2115 Looooops 扩展欧几里德的应用

    好开心又做出一道,看样子做数论一定要先看书,认认真真仔仔细细的看一下各种重要的性质 及其用途,然后第一次接触的题目 边想边看别人的怎么做的,这样做出第一道题目后,后面的题目就完全可以自己思考啦 设要+ ...

  3. poj 2115 C Looooops 扩展欧几里德

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23616   Accepted: 6517 Descr ...

  4. poj2115-C Looooops(扩展欧几里德算法)

    本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样.一,题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循 ...

  5. POJ2115 C Looooops[扩展欧几里得]

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24355   Accepted: 6788 Descr ...

  6. C Looooops(扩展欧几里德)

    C Looooops Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total S ...

  7. poj2115 C Looooops——扩展欧几里得

    题目:http://poj.org/problem?id=2115 就是扩展欧几里得呗: 然而忘记除公约数... 代码如下: #include<iostream> #include< ...

  8. POJ 2115 C Looooops (扩展欧几里德 + 线性同余方程)

    分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转 ...

  9. POJ - 2115 C Looooops(扩展欧几里德求解模线性方程(线性同余方程))

    d.对于这个循环, for (variable = A; variable != B; variable += C) statement; 给出A,B,C,求在k位存储系统下的循环次数. 例如k=4时 ...

随机推荐

  1. .NET面试题系列(十四)锁

    锁 分布式锁 如何解决分布式锁超时问题 我们可以让获得锁的线程开启一个守护线程,用来给快要过期的锁“续航” 当过去了29秒,线程A还没执行完,这时候守护线程会执行expire指令,为这把锁“续命”20 ...

  2. C#字体与Rectangle简单对应关系

    在1920*1080 无缩放分辨率下,Rectangle要至少是字体的2倍+2才不会被遮挡.

  3. FastReport 套打全攻略

    http://blog.csdn.net/jinzhili/article/details/500263 FastReport 套打全攻略  2005-7-13 22:10  原创//以设计套打行为6 ...

  4. 2 Player and N Coin

    class Solution { public void printChoices(int[] A, int[][] C) { System.out.println("硬币列表如下:&quo ...

  5. u-boot移植(七)---代码修改---存储控制器

    一.CPU访问芯片的条件 CPU通过访问存储控制器,来读取外部设备的数据. CPU想访问一个芯片,需要如下条件(配置信息): 地址线 数据线:8位/16位/32位数据宽度 时钟/频率 其他芯片相关的特 ...

  6. codeforces724G Xor-matic Number of the Graph

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  7. log4j2 的使用

    log4j2 是 log4j 的升级,更为方便,更为强大. log4j2.xml 的配置以及 log4j2的依赖包使用log4j2 并没有其他的依赖包,只是在使用log4j的情况下,需要别的进行桥接 ...

  8. ado.net 访问excel

    1 类:OleDbConnection ... 2 connection string : Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelPa ...

  9. Django学习手册 - 模板语言(前端获取后台数据)

    先在views视图内,定义列表数据,以及字典数据.运用render函数传递两个列表数据至前端. from django.shortcuts import render list_info = [ {& ...

  10. linux下比较两个文本文件的不同——diff命令

    1>Diff命令的功能Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处.它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序. 2>语 ...