
数论
码院
这个作者很懒,什么都没留下…
展开
-
扩展欧几里得算法
欧几里德算法 以下是根据百度百科给自己的总结: 欧几里德算法概述: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质: gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|) 欧几里得算法的公式表述 gcd(a,b原创 2012-08-11 02:07:50 · 474 阅读 · 0 评论 -
扩展欧几里得算法
欧几里德算法 欧几里德算法概述: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质: gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|) 欧几里得算法的公式表述 gcd(a,b)=gcd(b,a mod b原创 2012-08-20 12:50:05 · 580 阅读 · 0 评论 -
3n+1数链问题
问题如下: 1.输入一个正整数N; 2.把N显示出来; 3.如果N=1时则结束一切操作; 4.如果N是奇数则N变为3*N+1,否则N变为N/2; 5.转入步骤2. 问题分析: 这道题目比较简单,我们只需要按照题目的要求一步步的做下去就可以找到结果。 参考代码: #include using namespace std; int max,M; void原创 2013-03-07 20:13:26 · 1583 阅读 · 0 评论 -
K尾相等数
输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对“K尾相等数”。现在请编程求出M+N值最小的K尾相等数。 ---问题分析 对于一个数,它的幂是无穷无尽的,但是我们可以注意到末尾三位数只有1000个,也就是表明一定会有重复的末尾三位数,当一个数的末尾三位数一定时,它的下一次幂的末尾三位数也一定了 。也就是原创 2013-03-07 20:17:26 · 2624 阅读 · 0 评论 -
求自然数n的自然排列
/* 输出前n个自然数的所有排列*/ #include using namespace std; void swap(int &x,int &y) { int temp=x; x=y; y=temp; } int n; int data[100]; void solve(int t) { if(t==n) { for(int i=1;i<=n;i++) { cout<<da原创 2013-03-07 20:19:09 · 950 阅读 · 0 评论 -
最大公约数和最小公倍数
1.如果q和r是a除以b的商和余数,即a=b*q+r.则有gcd(a,b)=gcd(b,r).当r=0时,其最大公约数就是b了。 用辗转相除法求最大公约数 int Gcd(int a,int b) { int gcd; if(b==0) return a; else gcd=Gcd(b,a%b); } 利用最大公约数求出最小公倍数 Lcm(a,b)=a*b/(Gcd(a,原创 2013-03-07 20:21:28 · 693 阅读 · 0 评论