POJ-----C Looooops
C Looooops
Time Limit: 1000MS |
Memory Limit: 65536K |
|
---|---|---|
Total Submissions: 15282 |
Accepted: 3893 |
Description
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
Source
地址: http://poj.org/problem?id=2115
欧几里得扩展
转化的式子为: c*x+d*y=(b-a)mod(d) d=1LL<<k (题目的意思);
代码:
1 #include<iostream>
2 #include<cstdio>
3 #define LL long long
4 #include<cstring>
5 using namespace std;
6 LL x,y,q;
7 void exgcd(LL a, LL b)
8 {
9 if(b==0)
10 {
11 x=1,y=0,q=a;
12 }
13 else
14 {
15 exgcd(b,a%b);
16 LL temp=x;
17 x=y,y=temp-a/b*y;
18 }
19 }
20
21 int main()
22 {
23 LL a,b,c,k;
24 //freopen("test.in","r",stdin);
25 //freopen("test.out","w",stdout);
26 while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k),a+b+c+k)
27 {
28 LL temp=(LL)1<<k;
29 exgcd(c,temp);
30 if((b-a)%q)
31 printf("FOREVERn");
32 else
33 {
34 LL t=temp/q;
35 printf("%I64dn",(x*((b-a)/q)%t+t)%t);
36 }
37 }
38 return 0;
39 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 哈佛大学单细胞课程|笔记汇总 (五)
- 通过源码理解IGMP v1的实现(基于linux1.2.13)
- 微服务下数据一致性的几种实现方式
- 关于mac electron设备权限申请的方法
- 两种实现方式 | 如何查看消费者组的消费情况
- 一致性hash算法(golang)
- 微服务安全吗?
- 掌握Rabbitmq几个重要概念,从一条消息说起
- 超赞!墙裂推荐一个 MySQL 自动化运维工具!
- 设计模式-责任链模式
- 问题 linux下执行.sh 文件出现 no such file or directoryile
- 问题:ssm关于mybatis没有找到配置问题(not found)
- 设计模式-享元模式
- 设计模式-代理模式
- win10 x64下从0开始搭建YApi可视化接口管理平台