书中的题目是求两个数的最大公约数,其实这个问题时当我们学习C语言的时候老师就讲过的算法,和教学中的求素数是一个类型的问题。 我们当时学的方法是 “辗转相除法”,即利用公式: f(x, y) = f(y, x % y),直到 x % y == 0,取x就是两个数的最大公约数。 但是书中说道,乘除运算太浪费时间了,所以,我们可以换一种方法去思考这个问题,乘除不能用,就只能是加减了,...
分类:
其他好文 时间:
2014-09-27 16:38:40
阅读次数:
190
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:...
分类:
编程语言 时间:
2014-09-24 14:11:26
阅读次数:
292
欧几里得算法,辗转相除法,能很快求得最大公约数f(20,15)=f(15,5)=f(5,0)=5 1 #include 2 #include 3 //最大公约数 4 int gcd(int x,int y) 5 { 6 if(x<y) 7 return gcd(y,x);...
分类:
其他好文 时间:
2014-09-19 19:10:25
阅读次数:
161
1978: [BeiJing2010]取数游戏 gameTime Limit: 10 SecMemory Limit: 64 MBSubmit: 650Solved: 400[Submit][Status]Description小 C 刚学了辗转相除法,正不亦乐乎,这小 P 又出来捣乱,给小 C 留...
分类:
其他好文 时间:
2014-09-17 20:23:42
阅读次数:
344
1 #include 2 3 int main(void) 4 { 5 int x=252; 6 int y=105; 7 8 int temp; //临时保存变量 9 10 while(y!=0) //当y也就是余数为0的时候,x就是约数11 ...
分类:
其他好文 时间:
2014-09-06 18:30:53
阅读次数:
200
importjava.util.Scanner;
publicclassTest6{
//欧几里德辗转相除法
publicstaticintgcd(inta,intb){
intr;
while(b!=0){
r=a%b;
a=b;
b=r;
}
returna;
}
//最小公倍数的另一种解法
publicstaticintgcdtwo(inta,intb){
while(a!=b){
if(a>b){
a=a-b;
}else{
b=b-a;
}
}
re..
分类:
编程语言 时间:
2014-08-30 19:14:10
阅读次数:
231
知识点:辗转相除法求最大公约数内容: 求两个自然数的最大公约数输入说明:一行两个整数输出说明:一行最大公约数输入样例:2 4输出样例 :2#include int main(){ int a,b,t; scanf("%d %d",&a,&b); do { t=a%b; a=b; b=t; } ...
分类:
其他好文 时间:
2014-08-25 07:37:13
阅读次数:
189
欧几里得算法(又称辗转相除法)定理:gcd(a,b) = gcd(a,a mod b)证明:对于任何正整数a,b。如果a>b,都有a=k*b+r 即r=a-k*b => r=a mod b. 假设d为a,b的公约数,则a=a1*d,b=b1*d。 而r=a1*d-k*b1*d=(a1-k*b1)*d...
分类:
其他好文 时间:
2014-08-22 00:09:15
阅读次数:
287
素数筛:
//数除了{2,3,5}为素数,其他的数可以写成6N,6N+1,6N+2,6N+3,6N+4,6N+5 N>=1 可以表示全部的数
//6N,6N+2,6N+4都为偶数,不是素数,6N+3 == 3(2N+1) 不是素数,那么就只筛6N+1和6N+5就可以了
int prime[1000000]={2,3,5};
void is_prime()
{
int i,j;
...
分类:
其他好文 时间:
2014-08-19 20:58:25
阅读次数:
237