数论学习之起步篇(二)
来源:互联网 发布:望舒剑淘宝 编辑:程序博客网 时间:2024/05/16 18:25
同余与模算术
(a+b)%n = ((a%n)+(b%n))%n(a-b)%n = ((a%n)-(b%n)+n)%nab%n = (long long)(a%n)*(b%n)%n其中要注意a%n*b%n的值可能超int10-1 大整数取模输入正整数n和m,输出n mod m的值。n<=10^100,m<=10^9将大整数写成“自左向右”的形式:1234%n=(((1*10+2)*10+3)*10+4)%n,然后就可以用之前的公式来处理了#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<ctype.h>#include<algorithm>#include<string>#define PI acos(-1.0)using namespace std;int main (){ char n[110]; int m; scanf("%s%d",n,&m); int len=strlen(n); long long ans=0; for (int i=0; i<len; i++) ans=(ans*10+n[i]-'0')%m; printf("%d\n",ans); return 0;}10-2 幂取模输入正整数a、n和m,输出a^n mod m的值。a,n,m <= 10^9#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<ctype.h>#include<algorithm>#include<string>#define PI acos(-1.0)using namespace std;int pow_mod(int a, long long n, int m){ if (n==0) return 1; int x=pow_mod(a,n/2,m); long long ans=(long long)x*x%m; if (n%2) ans=ans*a%m; return (int)ans;}int main (){ int a,m; long long n; cin>>a>>n>>m; int ans=pow_mod(a,n,m); cout<<ans<<endl; return 0;}10-3 模线性方程输入正整数a,b,n,解方程ax≡b(mod n)。a,b,n<=10^9≡代表同余。即ax-b=ny。不难看出这就是一个扩展欧几里得算法还有就是ax≡1(mod n)的解称为a关于模n的逆元。ax-ny=1, 这代表了gcd(a,n)=1,才有唯一解。否则无解
- 数论学习之起步篇(二)
- 数论学习之起步篇(二)
- 数论学习之起步篇(一)
- 数论学习之起步篇(三)
- SpringBoot学习(二),起步
- Nhibernate学习之起步篇
- Nhibernate学习之起步篇
- Agile Java 学习笔记(二) 起步
- Spark学习起步(二):sparkContext
- python起步之粒子滤波(二)
- Nhibernate学习之起步篇-1
- Nhibernate学习之起步篇-1
- Nhibernate学习之起步篇-1
- Nhibernate学习之起步篇-1
- Android学习之起步
- 数论之欧几里德算法(二)
- 安卓学习基础篇——安卓开发起步(二)
- jQuery Mobile学习笔记(二)——框架起步
- 关于MFC
- 【伸展树篇】伸展树什么的再也不写啦---无父节点的Splay树
- 2013.10.04
- 教育学院网站项目需求、设计及实现
- C笔试---(1)
- 数论学习之起步篇(二)
- Struts2+Spring整合入门
- yii listview通过自定义的按钮控制listview的排序方法
- Spring与Struts1.X的集成(动力节点-王勇课堂笔记)
- <aop:aspectj-autoproxy />的作用
- c语言获得网络信息--使用libpcap包
- 再见编程小问题
- qsort 说明
- 你的大学呢?