poj2115C Looooops【扩展欧几里得】
2016-01-28 14:52
281 查看
Language: Default C Looooops
A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != B; variable += C) statement; I.e., a loop which starts by setting variable to value A and while variable is not equal to B, repeats statement followed by increasing the variable by C. We want to know how many times does the statement get executed for particular values of A, B and C, assuming that all arithmetics is calculated in a k-bit unsigned integer type (with values 0 <= x < 2k) modulo 2k. Input The input consists of several instances. Each instance is described by a single line with four integers A, B, C, k separated by a single space. The integer k (1 <= k <= 32) is the number of bits of the control variable of the loop and A, B, C (0 <= A, B, C < 2k) are the parameters of the loop. The input is finished by a line containing four zeros. Output The output consists of several lines corresponding to the instances on the input. The i-th line contains either the number of executions of the statement in the i-th instance (a single integer number) or the word FOREVER if the loop does not terminate. Sample Input 3 3 2 16 3 7 2 16 7 3 2 16 3 4 2 16 0 0 0 0 Sample Output 0 2 32766 FOREVER |
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<list>
#include<queue>
using namespace std;
void exgcd(long long a,long long b,long long &x,long long &y,long long &cnt){
if(b){
exgcd(b,a%b,y,x,cnt);
y-=(a/b)*x;
}
else{
x=1;y=0;
cnt=a;
}
}
int main()
{
int i,j;
long long a,b,c,k;
while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k),a+b+c+k){
long long num=1;num<<=k;
long long x,y,cnt;
exgcd(c,num,x,y,cnt);
if((b-a)%cnt){
printf("FOREVER\n");
}
else {
x=x*(b-a)/cnt;
cnt=num/cnt;
x=(x%cnt+cnt)%cnt;
printf("%lld\n",x);
}
}
return 0;
}
相关文章推荐
- 【Linxu学习003】Linux文本处理相关
- 查看php和apache配置成功的方法
- 在VS2015上配置OpenCV
- apache模块mod_rpaf ,让nginx后端的apache获取访客IP
- 关于虚拟内存与Linux内存管理不得不知道的
- 你知道哪些linux命令,能把文件上传到远程linux服务器
- tomcat配置没啥难的啊
- linux undefined reference Access(char* ...)函数错误
- Linux学习之CentOS(二十)--CentOS6.4下修改MySQL编码方法
- Linux命令—echo
- Linux性能监控之Memory篇
- linux 配置ip
- Linux学习之CentOS(二十一)--Linux系统启动详解
- ARM嵌入式Linux设备树简介及应用示例
- linux用户态与内核态
- shell截取字符串的方法
- Centos6 安全防护设置指南
- LAMP中如何设置open_basedir
- 10条命令,一分钟分析Linux性能问题
- 高性能服务器架构