c语言之同余定理的应用求2001的2003次方除以13的余数
2015-11-20 11:33
671 查看
同余的性质主要有:
(1)对于同一个除数,两数的和(或差)于他们余数的和(或差)同余数。
(2)对于同一个除数,两数的乘积与他们余数的乘积同余。
(3)对于同一个除数,如果两个整数同余,那么他们的差就一定能被这个数整除。
(4)对于同一个除数,如果两个整数同余,那么他们的乘方仍然同余。解答同余类型题目的关键是灵活运用性质,把求一个比较大的数字除以某数的余数问题转化为求一个较小数除以这个数的余数,使复杂的问题变得简单化。
求2001的2003次方除以13的余数。
网上给出的各种解决方案表示自己看不懂,后来自己找了一下规律发现其实并不是很难,现在我贴一下代码,很简单的方大家应该一看就能明白:
(1)对于同一个除数,两数的和(或差)于他们余数的和(或差)同余数。
(2)对于同一个除数,两数的乘积与他们余数的乘积同余。
(3)对于同一个除数,如果两个整数同余,那么他们的差就一定能被这个数整除。
(4)对于同一个除数,如果两个整数同余,那么他们的乘方仍然同余。解答同余类型题目的关键是灵活运用性质,把求一个比较大的数字除以某数的余数问题转化为求一个较小数除以这个数的余数,使复杂的问题变得简单化。
求2001的2003次方除以13的余数。
网上给出的各种解决方案表示自己看不懂,后来自己找了一下规律发现其实并不是很难,现在我贴一下代码,很简单的方大家应该一看就能明白:
/****************************求2001的2003次方除以13的余数***********************/ #include<stdio.h> #include<math.h> #define Max 100 int x,num; int m; void init() { printf("请输入x的num次幂:"); scanf("%d%d",&x,&num); printf("请输入模:"); scanf("%d",&m); } void function(int x,int num,int m) { int i = 0,j=0; int r = 0; int a[Max]; while(1) { r = (int)(pow(x,i+1)) % m; a[i] = r; i++; if(r == 1) break; } printf("%d 的 %d 次幂模 %d 的余数为:%d\n",x,num,m,a[num % i -1]); } //********************************此方法仅用来总结规律不用于计算************ //不用计算两个数的乘积,可以转化位分别求出1992÷7和59÷7的余数的积,使计算简单化。 //第一个余数是4,第二个余数是3.余数的乘积是12,除以7后的余数是5,所以1992×59除以7的余数是5. //简单记做因为1992×59≡4×3≡5(mod7),所以余数是5. void lj(int x,int num,int m) { int i=0; int r=0; int a[Max]; while(i<6) //i限制为6主要是因为幂指数过大会有内存溢出,次lj函数只是为了找规律 { r = (int)(pow(x,i+1)) % m; printf("%d的%d次幂对%d取余数为:%d\n",x,(i+1),m,r); a[i] = r; i++; } } /* 测试结果: 请输入x的num次幂:16 200(用16的200次幂对21求余数) 请输入模:21 a[0]: 16的1次幂对21取余数为:16 a[1]: 16的2次幂对21取余数为:4 16的2次幂对21取余数等于16的1次幂对21取余数(16)*16的1次幂对21取余数(16) = 16*16 % 21 = 256 % 21 = 4 a[2]: 16的3次幂对21取余数为:1 16的3次幂对21取余数等于16的2次幂对21取余数(16)*16的1次幂对21取余数(16) = 4*16 % 21 = 64 % 21 = 1 a[3]: 16的4次幂对21取余数为:16 a[4]: 16的5次幂对21取余数为:4 a[5]: 16的6次幂对21取余数为:1 因此总结得出规律x的num次幂对m取余数可以先找出前n个,然后用 num % n 求出的余数即代表第几个余数 */ //**************************************************************************** int main() { init(); function(x,num,m); return 0; }
相关文章推荐
- C++内存泄漏
- 24.c/c++程序员面试宝典-多态
- C++类的常量对象与常量成员函数
- sscanf的使用
- c++通用模板类(template class)定义实现详细介绍
- 值得学习的C语言开源项目
- 2048游戏C语言代码
- c++STL 中的copy函数
- C++虚函数实现原理与代价
- 高效率、灵活打印结构体串(C语言版)
- 23.c/c++程序员面试宝典-类成员
- C++中int和string类型的相互转换
- C++88个注意点子之6~10
- C++ 学习(类的继承,派生)
- CPP中解决伪共享
- Scala 通过 JNI 连接 C++程序
- 今日学习札记——STL通用算法(11.20)
- 设计模式C++ (Composite组合模式)
- 虚函数不应该是inlined(More Effective C++ 笔记)
- 22.c/c++程序员面试宝典-类