数论总结笔记

xiaoxiao2021-02-28  108

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; } 未完待续。。。。。。
转载请注明原文地址: https://www.6miu.com/read-58096.html

最新回复(0)