数论总结笔记

1、最大公约数性质

gcd(a,b)表示求a,b两个数的最大公约数。
(1)gcd(a,b) = gcd(±a,±b)。
(2)gcd(a,b) = gcd(a+kb,b),k为任何整数。
(3)gcd(a,b) = gcd(a mod b , b)。
(4)如果a是非零整数,那么gcd(a,0) = |a|。gcd(0,0)不存在。
根据性质(4)我们可以得到一种求最大公约数的方法,叫辗转相除法,也有称之为欧几里得算法。算法过程如下:
/*
* 辗转相除求最大公约数
* 输入:两个数a和b,两个数不能同时为0 
* 输出:a,b的最大公约数 
**/ 
int gcd(int a,int b)
{
	int temp;
	if(a==0)
	{
		return b;
	}
	while(b!=0)
	{
		temp = b;
		b = a % b;
		a = temp;
	}
} 

2、最小公倍数性质

lcm(a,b)表示求a,b两个数的最小公倍数。同样也有lcm(a,b) = lcm(|a| , |b|)。有以下计算公式:

3、习题

1、输入一个整数n,求n!中末尾0的个数。例如,输入3输出0,;输入100输出24;输入1024输出253。

求末尾有几个0,就是求n!中含有几个因子10。因子10又可分为因子5和因子2。因为明显可以看出因子2多于因子5,所以只要知道n!中有几个因子5,就求得答案。
例如对于输入100,1~100中共有 100/5 = 20个数可以被5整除,至少存在20个因子5。其中100、75、50、25可以被5整除两次,换句话说,就是1~100中有100/(5*5) = 4 个数存在有两个因子5,所以至少有 20 + 4 = 24个因子5。但是1~100中有100/(5*5*5) = 0个数存在有三个因子5,也就说一共有24个因子5,100!中末尾0的个数为24。
 
/*
*输入一个整数n 
*输出n!中末尾0的个数 
**/
#include<iostream>
using namespace std;
int main()
{
	int n,i,nn,count=0;
	cin >> n;
	i = 5;
	while(i<=n)
	{
		nn = n;
		nn = nn/i;
		count += nn;
		i = i*5;
	}
	cout << count;
	return 0;
}

未完待续。。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值