题意:有一个在k位无符号整数下的模型:for (variable = A; variable != B; variable += C)  statement; 问循环的次数,若“永不停息”(←_←)*,就输出"FOREVER"。

解法:用拓展欧几里德方法求出gcd最大公因数,再利用同余性质转化,求同余方程,或者不定方程。其中题目可化为 a+cx=b(mod 2^k) → cx=b-a(mod 2^k),求最小正整数解。也是求解同余方程。

先将方程化为一般形式:ax=c(mod p) →  ax+py=c 。若 gcd(a,p)|c,就可以利用 ax+py=gcd(a,b)(mod p) [一般没有mod p] ,再把变量 x,y 乘上 c/gcd(a,b) 就是答案了。而要求最小正整数解,就是根据 ax+py=gcd(a,p) → a(x+p/gcd(a,p))+p(y-a/gcd(a,p)=gcd(a,p) ,所有的 x' 都满足 x+p/gcd(a,p) 来进行调整,并且取模。因为 每对 x 与 x' 都相差 p/gcd(a,p),那么根据同余的定义,x 和 x' 关于模 p/gcd(a,p) 同余,所以可以一直取模来调整。而对于 p/gcd(a,p) ,为正时取模才有保证最非负的意义。

注意——位运算超过30位时,尽管变量为long long,也要在之前加上强制转型(long long)。见代码的24行......之前我一次比赛,数组初始化是long long类型的,也要在数字后面加上"LL"或" l l "。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 typedef long long LL;
7
8 LL mabs(LL x) {return x>0?x:-x;}
9 LL exgcd(LL a,LL b,LL& x,LL& y)
10 {
11 if (!b) {x=1,y=0; return a;}
12 LL d,tx,ty;
13 d=exgcd(b,a%b,tx,ty);//bx'+(a%b)y'=1(mod p)
14 x=ty,y=tx-(a/b)*ty;//ay'+b(x'-t*y')=1(mod p)
15 return d;
16 }
17 int main()
18 {
19 LL aa,bb,cc,pp;
20 while (1)
21 {
22 scanf("%I64d%I64d%I64d%I64d",&aa,&bb,&cc,&pp);
23 if (!aa && !bb && !cc && !pp) break;
24 LL a=cc,b=(LL)1<<pp,c=bb-aa,p=(LL)1<<pp;
25 LL d,x,y;//cx=b-a(mod 2^k)-->cx+2^k*y=b-a-->gcd(c,2^k)=1才有解
26 d=exgcd(a,b,x,y);
27 if (c%d!=0) printf("FOREVER\n");
28 else
29 {
30 x=(x*(c/d))%p;//ax+by=c(mod p)的解
31 LL t=mabs(b/d);
32 x=(x%t+t)%t;//最小非负整数解
33 if (!x) x+=t;//为0时要调整
34 printf("%I64d\n",x);
35 }
36 }
37 return 0;
38 }

最新文章

  1. phpstorm 配置 xdebug调试工具
  2. html 空链接 href=&quot;#&quot;与href=&quot;javascript:void(0)&quot;的区别
  3. maven archetype生成自定义项目原型(模板)
  4. NYOJ题目77开灯问题
  5. eclipse中快捷键
  6. Android(Xamarin)之旅(一)
  7. npm 项目更换目录后无法启动
  8. 非线性规划带约束-scipy.optimize.minimize
  9. MariaDB表表达式(2):CTE
  10. AnyConnect使用说明(手机版)
  11. el和jstl标签库讲解视频
  12. Java RedisClient
  13. Powershell script to install Windows Updates (msu) from folder
  14. apktook 反编译错误
  15. Kotlin------函数和代码注释
  16. GitHub从注册到使用
  17. Python函数(六)-嵌套函数
  18. Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决)
  19. 【01】webpack的安装过程截图
  20. python基础一 day3 列表

热门文章

  1. linux网关服务器
  2. explain extended;show warnings
  3. 【MYSQL】win7安装mysql-5.7.10绿色版
  4. Unsafe Filedownload - Pikachu
  5. MyBatis初级实战之四:druid多数据源
  6. Sentry(v20.12.1) K8S 云原生架构探索,1分钟上手 JavaScript 性能监控
  7. pytorch——合并分割
  8. 配置Charles 设置手机代理并允许https请求
  9. 计算机网络安全 —— C# 使用谷歌身份验证器(Google Authenticator)(五)
  10. Git提交代码规范 而且规范的Git提交历史,还可以直接生成项目发版的CHANGELOG(semantic-release)