POJ 2115-C Looooops-扩展欧几里德算法

poj-2115 C Looooops 扩展欧几里德算法求最小非负整数解 题目链接poj-2115 C Looooops题目C LooooopsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 30130 Accepted: 8704DescriptionA Compiler Mystery: We are given a C-language style for loop of type for (va... 阅读详情
C Looooops
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 21526 Accepted: 5868

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 < 2 k) modulo 2 k. 

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 < 2 k) 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



知识点:


#include<iostream>
using namespace std;

//d=ax+by,其中最大公约数d=gcd(a,b),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(void)
{
	__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;  //2^k
		__int64 x,y;
		__int64 d=EXTENDED_EUCLID(a,n,x,y);  //求a,n的最大公约数d=gcd(a,n)和方程d=ax+by的系数x、y

		if(b%d!=0)  //方程 ax=b(mod n) 无解
			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;
}


在 TASKPROCESSING 上为 ABAP OData 服务添加多个系统别名:从原理到落地的完整实践 本文面向SAP Gateway与ABAP开发者,详细讲解如何在TASKPROCESSING OData服务上添加系统别名。首先介绍了系统别名的概念与设计初衷,阐述了添加别名的业务场景需求,包括多系统接入、用户分流和灰度发布等。随后提供了标准配置步骤,从SPRO路径到具体操作说明,并分享了三个实际案例说明如何实现跨区域统一待办、按用户角色分流和灰度发布。最后给出了验证方法和常见问题解决方案,帮助开发者掌握这项基础但关键的配置技能,实现服务路由的可控管理。 阅读详情

相关推荐

Mathcad在LLC谐振变换器设计中的公式推导实战

本文通过Mathcad软件,详细演示了LLC谐振变换器设计的核心公式推导实战。文章阐述了如何利用Mathcad作为“会思考的草稿纸”,从定义基本参数、应用基波近似法(FHA)模型,到逐步推导电压增益公式及确定工作边界频率(fmin, fmax),并展示了如何通过动态参数扫描进行优化设计,帮助电源工程师高效、直观地完成理论计算,为后续仿真与实现奠定坚实基础。

q1w3e5r7t9y的博客 297

【每日一题】洛谷 P1082(扩展欧几里得定理)

想她一次就背十个单词,当我英语过六级后,我就去告诉她,我很在意她 一天一道数论题,当我可以秒杀数论题的时候,就开始做 DP 今日份快乐:同余方程 传送门 明日份快乐:洛谷 P1297 传送门 题目大意 求关于x 的同余方程 a * x ≡ 1(mod b) 的最小正整数解。 分析 这个题就是个裸的数论题(废话) a * x ≡ 1(mod b) 的意思就是 a * x mod b = 1 根据取模运算,我们进行一波转化得到:== a * x + b * y = 1 == == = ==.

mldl_的博客 490

当爬虫遇到TikTok滑块:一份给开发者的verifyV2避坑指南与调试心得

本文详细解析了TikTok滑块验证码verifyV2的破解与优化策略,涵盖验证码触发机制、滑块图片获取、验证请求构造及高级调试技巧。通过实战案例和代码示例,帮助开发者有效应对复杂反爬机制,提升验证通过率。特别针对verifyV2系统的加密算法和轨迹模拟提供了专业解决方案。

weixin_30919429的博客 641

题解——洛谷P2613 【模板】有理数取余(扩展欧几里得算法+逆元)

题面 题目描述 给出一个有理数c=\frac{a}{b} ​,求cmod19260817 的值。 输入输出格式 输入格式: 一共两行。 第一行,一个整数 \( a \)。第二行,一个整数 \( b \)。 输出格式: 一个整数,代表求余后的结果。如果无解,输出Angry! 说明 对于所有数据,\(0\leq a,b \leq 10^{10001}...

weixin_34295316的博客 287

FPGA开发者必看:Xilinx PCIe IP核BAR地址配置避坑指南(附实例解析)

本文为FPGA开发者提供了Xilinx PCIe IP核中BAR地址配置的详细避坑指南。文章深入解析了32位与64位地址空间的选择逻辑、Pcie to AXI Translation参数的核心作用,并通过实例说明如何正确配置以避免地址映射错乱和数据访问失败。重点探讨了BAR空间类型、大小设定以及地址转换机制,帮助开发者构建清晰可靠的PCIe系统,是调试与优化PCIe设计的关键参考。

weixin_29252171的博客 425

Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集)

零基础自学yolov5,学会简单使用和训练自己的数据集,在自己工作中使用

qq_41597915的博客 1万+

洛谷P1082 拓展欧几里得算法

原题地址 没什么好讲的,一道简单的模板题 #include<bits/stdc++.h> #define ll long long using namespace std; ll x,y;//ax+by=gcd(a,b) void exgcd(int a,int b){ if(!b){ x=1;//赋初始值 y=0; return ;//探索到了最后一层,返回上一层...

naiue的博客 222

避坑指南:海康MV_CC_SetIntValue接口的7个典型报错解决方案

本文深度解析海康工业相机SDK中MV_CC_SetIntValue接口的典型报错,提供7个实战解决方案。针对MV_E_CALLORDER、MV_E_PARAMETER等高频错误码,从设备状态、参数值域、依赖关系等核心约束入手,给出清晰的诊断流程与根治代码,帮助开发者构建健壮的参数设置模块,提升开发效率。

y2z3a4b5c的博客 1080

扩展欧几里德算法计算乘法逆元详解

乘法逆元的定义:       A * X MOD N == 1则称X为A关于模N的乘法逆元。 注:       只有两个数互素的时候才会有乘法逆元。       两个数不互素是没有乘法逆元的。   费马小定理: 利用费马小定理只能求出N为素数的情况下的乘法逆元,所以还是需要采用扩展欧几里德算法来计算普遍情况下的乘法逆元的情况。 下面的算法是求出n的简化剩余集的元素个数,利用 an

Wind_white的博客 1万+

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

shannanshouyin的博客 1277

lammps后处理:ovito选择原子高级技巧讲解

大家好,我是小马老师。 本文介绍如何在ovito中使用公式(Expression)选择需要的原子。 用ovito查看lammps模拟结果时,可能会遇到选择特定原子的情况,比如选择坐标位于一定范围内的原子,或者选择结构为fcc的原子等等。 这时候,就需要用到expression selection功能。 Expression selection功能比较强大,下面分别介绍几种选择原子的方法。 在输入公式前,先点击“Add modification”->"Expression selection"选项,在B

lammps_jiayou的博客 2万+

POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.youkuaiyun.com/suncongbo/article/details/79382991 题目链接: (poj)http://poj.org/problem?id=1061 (b...

suncongbo's blog 194

Python 爬虫进阶:淘宝热卖商品价格走势抓取、反爬与分析全流程

在大数据时代,数据是商业决策的重要依据。电商平台上的商品价格走势,对于商家调整经营策略、消费者选择购买时机都有着关键的参考价值。本篇文章将深入解析如何利用 Python 爬虫抓取淘宝热卖商品的价格走势数据,并应对其中的反爬机制,最后对数据进行分析,带领大家领略 Python 爬虫在电商领域的强大应用。

yansideyucsdn的博客 1058

POJ 2115 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 vari...

weixin_44705665的博客 219

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJ-2115-C Looooops-扩展欧几里德算法

http://poj.org/problem?id=2115 for (variable = A; variable != B; variable += C) 问你要执行多少次,循环才会停止,不会停止输出forever 输入abck; mod=1 也就是  (a+b*x)%mod==c // (x*c+a)%(1 //即 (x*c+a)与b同余 (1 //即 (

缺氧 608

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

poj 2115 C Looooops(扩展欧几里德算法)

题意:        对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束。   比如:当k=4时,存储的数 i 在0-15之间循环。(本题默认为无符号)   若在有限次内结束,则输出循环次数。   否则输出死循环。 二,思路: 本题利用扩展欧几里德算法求线性同余方程,设循环次数为 x ,则解方程 (A + C*x) % 2^k = B ;求

sxy201658506207的博客 316

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

poj 2115 C Looooops 扩展欧几里德算法

C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15305   Accepted: 3901 Description A Compiler Mystery: We are given a C-language style for loop of

停不下的脚步 992

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

本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样。一,题意:   对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束。     比如:当k=4时,存储的数 i 在0-15之间循环。(本题默认为无符号)   若在有限次内结束,则输出循环次数。   否则输出死循环。二,思路: 本题利用扩展欧几里德算...

weixin_30838921的博客 200

POJ 2115 C Looooops (扩展欧几里德算法求模线性方程)

POJ 2115 C Looooops (扩展欧几里德算法求模线性方程)

WinForBest 484

poj 2115 Looooops 扩展欧几里德算法 最小正数解

传送门 题解转载地址http://www.cnblogs.com/My-Sunshine/p/4828600.html 本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样。 一,题意:   对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束。     比如:当k=4时,存储的数 i 在0-15...

henucm的博客 672

【POJ 2115】 C Looooops (扩展欧几里德)

【POJ 2115】 C Looooops 输入四个数a b c k 一个循环for(a;;a += c) if(a == b) break; a在k进制内循环 即0 可以得到一个方程 满足题意的话 a+c*x = b(mod 2^k) 即 c*x = b(mod 2^k) + a = (b+a)(mod 2^k) 同余 就变成求c跟2^k的逆元了 跑一遍扩欧即可 注意要变换

ACMer' 936

POJ 2115 C Looooops

C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13902   Accepted: 3467 Description A Compiler Mystery: We are given a C-language style for loop of t

ACM2272902662的专栏 725

poj 2115 C Looooops

http://poj.org/problem?id=2115 C Looooops Time Limit:1000MS Memory Limit:65536K Total Submissions:20725 Accepted:5598 Description A Compiler Mystery: We are g...

deyou1988的专栏 136

[poj 2115] C Looooops 扩展欧几里得

C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21706 Accepted: 5927Description A Compiler Mystery: We are given a C-language style for loop of typefor (variable =

ATOD 890

POJ 2115- C Looooops(扩展欧几里德)

C Looooops Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2115 Appoint description:  System Crawler  (2015-05-26) Description

Rocky0429 1870

poj2115 Looooops(扩展欧几里德模板)

poj2115 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,

ACZone 421
上一篇: 第12周-显示一个棋盘
下一篇: hdu 2150- Pipe-解析几何
kewlgrl
博客等级 码龄12年 507粉丝 971原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值