1200 同余方程 2012年NOIP全国联赛提高组

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 钻石 Diamond

题目描述 Description

求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解。

输入描述 Input Description

输入只有一行,包含两个正整数 a, b,用 一个 空格隔开。

输出描述 Output Description

输出只有一行包含一个正整数x0,即最小正整数解,输入数据保证一定有解。

样例输入 Sample Input

3 10

样例输出 Sample Output

7

数据范围及提示 Data Size & Hint

【数据范围】

对于 40% 的数据, 2 ≤b≤ 1,000 ;

对于 60% 的数据, 2 ≤b≤ 50,000,000

对于 100% 的数据, 2 ≤a, b≤ 2,000,000,000

分类标签 Tags

欧几里德定理 数论 大陆地区 NOIP全国联赛提高组 2012年

  1. /*
  2. 求关于x的模线性方程
  3. ax≡1(mod b)的最小正整数解.
  4. 我们可以转化求不定方程ax+by=1的根来求.
  5. 若方程有整数解 则gcd(a,b)=1(即 1|gcd(a,b)).
  6. 求出一组解(x0,y0).
  7. 然后特殊地此题gcd(a,b)=1.
  8. so x+b/gcd(a,b)等价于x+b.
  9. 又因为是mod b的剩余系中.
  10. so ans=(x+b)%b.
  11. 观察此式 可知x是a关于mod y剩余系下的逆元.
  12. 若b为质数 则由费马小定理
  13. a^(p-1)=1,可知a^(p-2)为逆元.
  14. */
  15. #include<iostream>
  16. #include<cstdio>
  17. #define LL long long
  18. using namespace std;
  19. LL x,y;
  20. inline int read()
  21. {
  22. int x=0,f=1;char ch=getchar();
  23. while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
  24. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  25. return x*f;
  26. }
  27. void ex_gcd(LL a,LL b,LL &x,LL &y)
  28. {
  29. if(!b) {x=1,y=0;return ;}
  30. else ex_gcd(b,a%b,y,x),y-=(a/b)*x;
  31. }
  32. int main()
  33. {
  34. LL a,b;
  35. a=read(),b=read();
  36. ex_gcd(a,b,x,y);
  37. cout<<(x+b)%b;
  38. return 0;
  39. }
  1. /*
  2. 看到网上有这种做法.
  3. 挺巧妙的.
  4. 由欧拉函数性质:a^phi(b)%b=1.
  5. so a*a^(phi(b)-1)%b=1.
  6. so 该方程的解为x=a^(phi(b)-1).
  7. so 在mod b剩余系下
  8. 最小正整数解为x=a^(phi(b)-1)%b.
  9. 然后枚举因子求phi(b),快速幂求a^(phi(b)-1)%b.
  10. 特殊地若b为质数
  11. 由欧拉函数性质phi(b)=b-1.
  12. 即求a^(b-2)%b.(和费马小定理的结论一样....)
  13. */
  14. #include<iostream>
  15. #include<cstdio>
  16. #define LL long long
  17. using namespace std;
  18. LL x,y,s,ans,a,b;
  19. inline LL read()
  20. {
  21. LL x=0,f=1;char ch=getchar();
  22. while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
  23. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  24. return x*f;
  25. }
  26. void eu()
  27. {
  28. LL n=b;
  29. ans=n;
  30. for(int i=2;i*i<=n;i++)
  31. {
  32. if(!(n%i))
  33. {
  34. while(!(n%i)) n/=i;
  35. ans=ans/i*(i-1);
  36. }
  37. }
  38. if(n>1) ans=ans/n*(n-1);
  39. }
  40. LL mi(LL a,LL p)
  41. {
  42. LL tot=1;
  43. while(p)
  44. {
  45. if(p&1) tot=tot*a%b;
  46. a=a*a%b;
  47. p>>=1;
  48. }
  49. return tot;
  50. }
  51. int main()
  52. {
  53. a=read(),b=read();
  54. eu();
  55. ans=mi(a,ans-1)%b;
  56. cout<<ans;
  57. return 0;
  58. }

Codevs 1200 同余方程 2012年NOIP全国联赛提高组的更多相关文章

  1. codevs 1200 同余方程 2012年NOIP全国联赛提高组 x

    /*我在提交的时候发现了一个特别好玩的事,有兴趣的话,可以自己尝试一下:把下面说的地方的y=0改为y=1在codevs里面能够ac,这……数据水?到一定境界……厉害了,吓得我还以为自己对了,结果一讲才 ...

  2. 1200 同余方程 2012年NOIP全国联赛提高组

    题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Description 输入只有一行,包含两个正整数 a, b,用 一个 空 ...

  3. 同余方程 2012年NOIP全国联赛提高组

    时间限制: 1 s   空间限制: 128000 KB 题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Descriptio ...

  4. Codevs 1218 疫情控制 2012年NOIP全国联赛提高组

    1218 疫情控制 2012年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description H 国有 n 个城市,这 ...

  5. Codevs 1217 借教室 2012年NOIP全国联赛提高组

    1217 借教室 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在大学期间,经常需要租借教 ...

  6. Codevs 1198 国王游戏 2012年NOIP全国联赛提高组

    1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...

  7. 开车旅行 2012年NOIP全国联赛提高组(倍增+set)

    开车旅行 2012年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 小A 和小B决定利用 ...

  8. Codevs 3289 花匠 2013年NOIP全国联赛提高组

    3289 花匠 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 花匠栋栋种了一排花,每株花都 ...

  9. Codevs 1171 潜伏者 2009年NOIP全国联赛提高组

    1171 潜伏者 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description [问题描述] R 国和S 国正陷 ...

随机推荐

  1. django时区与时间差的问题

    时区的正确配置方式: # 这里还可以配置成中文 一般用不到 LANGUAGE_CODE = 'en-us' # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai ...

  2. Django初步完成:登录、注册、退出

    python环境:python2.7 开发工具:pycharm 项目名称:mysite5 app名称:online settings:映射app路径 INSTALLED_APPS = [ 'djang ...

  3. C++中重载函数详解

    函数的重载详解 什么时函数重载: 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避 ...

  4. centos中mariadb的相关操作

    Tip 1 在使用mariadb中启动服务报错 : Failed to start mariadb.service: Unit not found. 解决办法: yum install -y mari ...

  5. windows server12 FTP 创建后常见问题

    一:用administrator 关闭防火墙可以访问,但是开启后不能访问 今天在windows server 2008 R2上安装了FTP,安装过程如下,然后添加内置防火墙设置,设置后发现本地可以访问 ...

  6. Linq操作之Except,Distinct,Left Join 【转】

    最近项目中用到了Linq中Except,Distinct,Left Join这几个运算,这篇简单的记录一下这几种情形. Except      基础类型使用Linq的运算很简单,下面用来计算两个集合的 ...

  7. O054、Attach Volume 操作(Part II)

    参考https://www.cnblogs.com/CloudMan6/p/5631328.html     计算节点作为iSCSI initiator 访问存储节点 iSCSI Target 上的v ...

  8. opencv3.3.1 + win64 + contrib + cuda 编译

    一 . opencv3.3.1  + win64 + contrib + cuda   编译 1.下载各种依赖 下载安装cuda  https://developer.nvidia.com/cuda- ...

  9. 1.移动端自动化测试-知识笔记(面试必备,测试点,adb命令)

    移动端测试: 移动应用,特性(功能) 满足 需求(产品文档,隐性需求) 一.App功能测试: 死活背下来1.业务逻辑正确性测试: 产品文档,隐性需求- 写成测试用例 2.兼容性测试:   1.系统版本 ...

  10. mysql复制表的方法

    ## 跨库复制表的方法 使用navicat 直接使用navicat的 转储sql文件 结构+数据 mysqldump 备份导出 导入 (数据库备份-恢复) mysqldump -h链接ip -P(大写 ...