当前位置: 首页 > news >正文

POJ2115 C Looooops 模线性方程(扩展欧几里得)

题意:很明显,我就不说了

分析:令n=2^k,因为A,B,C<n,所以取模以后不会变化,所以就是求(A+x*C)%n=B

转化一下就是求 C*x=B-A(%n),最小的x

令a=C,b=B-A

原式等于ax=b(mod n) 这就是标准的解模线性方程

该方程有解的充要条件是d=gcd(n,a) && d|b(可以根据这一条判断是否FOREVER)

然后参考算法导论应用扩展欧几里得求解x

a*x0+n*y0=d

x=x0*(b/d)(mod n)

然后应用多解条件求最小正整数解,即解的最小间距t=n/d,x+=i*t,i=0,1,..d-1

x=(x%t+t)%t

代码:

#include <cstdio>
#include <iostream>
#include <ctime>
#include <vector>
#include <cmath>
#include <map>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
LL x,y;
LL Egcd(LL a,LL b)
{
    if(b==0)
    {
       x=1;
       y=0;
       return a;
    }
    int res=Egcd(b,a%b);
    LL tmp=x;
    x=y;
    y=tmp-a/b*y;
    return res;
}
int main()
{
    LL a,b,c,k;
    while(~scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k))
    {
        if(!a&&!b&&!c&&!k)break;
        LL n=(1ll<<k);
        LL d=Egcd(c,n);
        if((b-a)%d)
        {
            printf("FOREVER\n");
            continue;
        }
        x*=((b-a)/d);
        x=(x%(n/d)+n/d)%(n/d);
        printf("%I64d\n",x);
    }
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/shuguangzw/p/5211348.html

相关文章:

  • 矩阵快速幂,简单粗暴
  • Mysql----浅入浅出之视图、存储过程、触发器
  • 当前端也拥有 Server 的能力
  • GridView中使用 jQuery DatePicker (UpdatePanel)
  • 39.Android版本小知识
  • 适合初学者的理解Sphinx运行方式
  • java--- Map详解
  • springMVC-mvc:annotation-driven
  • MyCat源码分析系列之——BufferPool与缓存机制
  • web项目中各种路径的获取
  • hdu 1081 dp问题:最大子矩阵和
  • ssh 命令
  • 0302思考并回答一些问题
  • html怎么添加背景图片
  • python的种类
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Angularjs之国际化
  • CSS实用技巧
  • Django 博客开发教程 8 - 博客文章详情页
  • happypack两次报错的问题
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • k8s 面向应用开发者的基础命令
  • MQ框架的比较
  • Puppeteer:浏览器控制器
  • Spring Boot快速入门(一):Hello Spring Boot
  • uva 10370 Above Average
  • vue-router的history模式发布配置
  • 大整数乘法-表格法
  • 高度不固定时垂直居中
  • 给github项目添加CI badge
  • 官方解决所有 npm 全局安装权限问题
  • 检测对象或数组
  • 每天一个设计模式之命令模式
  • 排序算法学习笔记
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 问题之ssh中Host key verification failed的解决
  • 新版博客前端前瞻
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 移动端高清、多屏适配方案
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • (C语言)共用体union的用法举例
  • (Note)C++中的继承方式
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)springcloud实战之config配置中心
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (十八)三元表达式和列表解析
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)树状数组
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core Swagger 过滤部分Api
  • .NET设计模式(2):单件模式(Singleton Pattern)