欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。
基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。
递归代码:
__int64 gcd(__int64 a,__int64 b)
{
return b==0?a:gcd(b,a%b);
}
扩展欧几里得
基本...
分类:
其他好文 时间:
2014-07-29 15:00:38
阅读次数:
431
问题描述 对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。 如果某个正整数x满足:g(x)>g(i)02×109。所以,我们就得到了一个很重要的性质: 性质一:在[1,2×10^9]中,一个数最多有10个不同的质因子。 根据经验,一个正整数N,其约数个数是级的[3]。因此...
分类:
其他好文 时间:
2014-07-29 12:12:56
阅读次数:
203
算法总结之欧几里德算法1.欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。 其计算原理依赖于下面的定理: gcd(a,b)=gcd(b,amodb)(a>b且amodb不为0)代码实现:1 int gcd(int a,int b)2 {3 return ...
分类:
其他好文 时间:
2014-07-29 10:29:16
阅读次数:
231
//一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身正的约数)//例如6=1+2+3.编程找出1000以内的所有完数classTestWanShu{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=1000;i++){for(intj=1;j<i;j++){if(i%j==0){sum+=j;}..
分类:
其他好文 时间:
2014-07-28 00:41:29
阅读次数:
165
思路:一个一个的找,因为c不等于b 且b是(a, c)的最大公约数, 所以c是b的整数倍, 每找到一个c就判断与 a的最大公约数是不是b,不是的话,就继续
刚开始的时候 居然把gcd非递归形式忘了。。。也没想用递归形式。。
又见GCD
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (...
分类:
其他好文 时间:
2014-07-28 00:27:10
阅读次数:
246
#include#includeint main(){ int n; int a,b,r; int p,t; scanf("%d",&n); while(n--) { scanf("%d %d",&a,&b); if(a<b) { t=a; a=b...
分类:
其他好文 时间:
2014-07-27 22:21:19
阅读次数:
186
定理:一个正整数 n 可以用素因子唯一表示为 p1^r1 * p2^r2 * ...
pk^rk (其中 pi 为素数) , 那么这个数的因子的个数就是,(r1+1)*(r2+1)*...*(rk+1).
理解:为什么是加1之后再相乘,因为一个数的的因子数至少为1和他自身,但因为r1,r2。。可以为0,所以因子的个数为(r1+1)。。。
拓展一下:
定理1: 一个正整数 n 可以用素...
分类:
其他好文 时间:
2014-07-26 15:32:46
阅读次数:
194
大致题意:求A^B的所有约数(即因子)之和,并对其取模 9901再输出。解题思路:应用定理主要有三个:(1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式。 A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn) 其中pi均为素数(2) 约数和公式...
分类:
其他好文 时间:
2014-07-26 14:24:40
阅读次数:
291
/*
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 148 Accepted Submission(s) : 19
Font: Times New Roman | Verdana | Georgia
Font Size: ←...
分类:
其他好文 时间:
2014-07-26 02:50:46
阅读次数:
252
1、同余定理
(a+b)%c==(a%c+b%c)%c
(a*b)%c==[(a%c)*(b%c)]%c
因为有的数在int范围内,但是两个的乘积却超过了int范围,这样可以避免运算过程中超过int范围
2、gcd函数(即最大公约数)
int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}...
分类:
其他好文 时间:
2014-07-25 11:09:31
阅读次数:
187