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

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

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

根据题意可以得到同余式

A+Cx≡B mod(2k)A+Cx≡B mod(2k)
x是所求次数

所以Cx≡(B−A) mod(2k)Cx≡(B−A) mod(2k)

即 Cx+2ky=B−ACx+2ky=B−A
利用扩展欧几里徳求解即可

好不容易自己写了会欧几里徳又他妈wa了好几发
原因是2k2k我用的移位运算
即 1<<k1<<k
但是1是默认int型,k最大32,会溢出
所以要转换格式,应写成
1LL<<k1LL<<k
FUCK!FUCK!
以后移位运算一定得注意!!!
code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll A,B,C,k;
ll ex_gcd(ll a,ll b,ll &x,ll &y){
    if(b == 0){
        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) != EOF){
        if(A == 0 && B == 0 && C == 0 && k == 0) break;
        ll a = C;
        ll b = 1LL << k;
        ll c = B - A;
        ll x,y;
        ll gcd = ex_gcd(a,b,x,y);
        if(c % gcd){
            printf("FOREVER\n");
            continue;
        }
        x *= c/gcd;
        b /= gcd;
        if(b < 0) b = -b;
        ll ans = x % b;
        if(ans < 0) ans += b;
        printf("%lld\n",ans);
    }
    return 0;
}
c语言实现扩展的欧几里得算法 包括完整的c语言实现扩展的欧几里得算法代码截图和相关代码说明以及程序截图 立即下载

相关推荐

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

爱学习的草莓熊 1万+

POJ-2115(扩展欧几里得--模板题)

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

weixin_53729021的博客 349

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4062

C Looooops(扩展欧几里得)

C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20128 Accepted: 5405 Description A Compiler Mystery: We are given a C-language style for loop of type f...

weixin_30872789的博客 241

AD5940阻抗测量开发板实战:从源码获取到工程调试全解析

本文详细解析了AD5940阻抗测量开发板的实战应用,从源码获取到工程调试的全过程。AD5940作为ADI公司的高精度阻抗测量前端芯片,适用于生物阻抗分析、电化学传感器等领域。文章提供了开发环境搭建、工程配置、常见问题排查及进阶调试技巧,帮助开发者快速掌握AD5940开发板的使用方法。

weixin_30919429的博客 212

Excel曲线拟合实战:从基础趋势线到高级回归分析

本文系统介绍了Excel曲线拟合的完整工作流,从基础的散点图与趋势线应用,到利用Solver插件进行自定义高级回归分析。文章详细讲解了线性、多项式、指数、对数等六大常用数学模型的适用场景与选择方法,并强调了通过R²值、残差图评估拟合效果、避免过拟合与外推风险的关键步骤,帮助读者掌握从数据探索到预测评估的实战技能。

weixin_29280219的博客 532

POJ2115 C Looooops

POJ2115 C Looooops Time Limit:1000MS Memory Limit:65536K Total Submissions:11146 Accepted:2622 Description A Compiler Mystery: We are given a C-language style for l...

weixin_30838873的博客 247

从零实战:基于华中8型数控系统的CNC数据采集与二次开发

本文详细介绍了基于华中8型数控系统的CNC数据采集与二次开发实战指南。从开发环境准备到核心数据采集实现,涵盖Windows平台配置、实时数据采集、报警处理等关键技术,帮助开发者快速掌握华中数控系统的数据采集能力,提升智能制造水平。

weixin_42561143的博客 812

Looooops(求解同余方程、同余方程用法)【拓展欧几里得】

Looooops(点击) A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != B; variable += C) statement; I....

XJHui 631

如何通过 Python 爬虫抓取并分析政府开放数据

通过本文的介绍,我们展示了如何使用Python 爬虫抓取并分析政府开放数据。通过requests获取政府开放数据的 API 接口数据。使用和pandas进行数据清洗与存储。使用matplotlib对数据进行可视化。你可以根据不同的政府开放平台和数据集进行调整,应用于不同领域的数据分析,如公共健康、交通、环保等。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1077

YOLOv13改进策略【Head】| 引入RT-DETR中的RTDETRDecoder,替换检测头

本文记录的是基于RTDETRDecoder模块的YOLOv13目标检测改进方法研究。RT-DETR的模块通过,能为解码器提供高质量的初始,从而。相比v13原始的检测头,RT-DETR能,替换后能够更好的提高模型性能。

Limiiiing的博客 433

POJ 2115 C Looooops (拓展欧几里德及证明)

大前提你要知道 拓展欧几里得的算法函数 首先 一定存在整数对满足方程  ax+by=gcd(a,b)   这里gcd(a,b)是最大公约数 同gcd一样我们可以用递归定义exgcd   假设已经求得 bx’+(a%b)y’=gcd(a,b)                         已知a%b=a-(a/b)*b        (为什么会这样 因为a/b取整)          ...

k_koris的博客 256

相机Camera日志分析之二十六:高通相机Camx 基于预览1帧的process_capture_request重要完整日志【见注释】

文章摘要:该日志记录了一个相机预览请求的处理流程。系统从HAL层开始处理capture_request,填充预览/拍照的buffer数据,并激活相关pipeline。流程涉及多个模块(ChiNodeWrapper、IFE、IPE等)的协同工作,包括获取ImageBuffer、设置请求映射关系、处理特征美颜参数(开关状态0,级别1)等关键步骤。日志详细展示了从请求下发到各节点处理的完整链路,包含多次buffer获取、fence设置及数据传递过程,最终完成预览帧数据的处理和保存(第0帧和第1帧)。该流程体现了移

515

【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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

POJ2115 C Looooops 扩展欧几里德

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2115 题意   对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束。若在有限次内结束,则输出循环次数。否则输出死循环。 题解   原题题意再次缩略:   A + xCΞB (mod 2k)   求x的最小正整数值。   ...

weixin_30682127的博客 172

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

题意:对于C的for(i=A ; i!=B ;i +=C)循环语句,A,B,C为无符号整型,最大为2^k-1,问这个循环能否结束,如果能结束,输出循环次数,否则输出FOREVER 思路:设循环x次,(A+Cx)%2^k = B,则A+Cx=B+(2^k)y,y为未知数,移项后为Cx-(2^k)*y=B-A==>Cx+(2^k)(-y) = B-A,到这里就看出来用扩展欧几里德算法求解了。d=gcd

梦幻的蔷薇色 426

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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 1869

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

题目链接: POJ 2115 C Looooops 题意: 有一个循环语句,变量从A开始,每次都要+C,终止条件是变量==B,每次累加都要mod 2^k.问循环最多执行几次?或者永远循环, 分析: 令K = 2^k.设循环执行了x次则:(A + C * x) mod K = B,也就是A + C * x = B + K * y. 移项可得:C * x - K * y = B - A.那么

ramay7 575

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

呃,整整坐了一天,终于弄懂了这题,同时也弄明白了一个知识点——扩展欧几里德算法,真不容易啊! 恩,怎么解释呢,从这道题说起吧。 解这题的思路就是:(a+x*c)%2^k=b,即x*c=(b-a)%2^k。扩展欧几里德算法就是对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x, y ,使得 gcd(a,b)=ax+by。 解x,y的...

B218707的博客 154

POJ 2115 C Looooops 扩展欧几里德

C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31879   Accepted: 9269 Descrip...

pxlsdz的博客 367

[poj 2115]C Looooops[扩展欧几里德][模线性方程]

题意: for (variable = A; variable != B; variable += C)       statement; 给出A,B,C和k(k表示变量是在k位机下的无符号整数),判断循环次数,不能终止输出"FOREVER". 思路: 需要求解     (A + x * C) % mod = B 变形之后即         C * x + mod * y = B -

以中有足乐者... 1302

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

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

poj 2115 C Looooops 扩展欧几里德

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

weixin_30655219的博客 107

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

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

Some. 1144
上一篇: Emoogle Grid UVA - 11916(BSGS)
下一篇: Death to Binary? POJ - 2116(模拟+贪心)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值