Prime and GCD
素数
素数是什么?见小学数学书
如何判断一个数是否是素数?
对于任何正整数,因子总是成对出现。所以只要要判断的数n在2~n之间没有因子,n就是质数
1 2 3 4 5 6 7 8 9
| bool isPrime(int a) { if (a < 2) return 0; for (int i = 2; i * i <= a; ++i) if (a % i == 0) return 0; return 1; }
|
GCD
GCD(Greatest Common Divisor) 最大公约数
其实C++有内置的GCD函数,但是因为某种原因,建议不要使用!
再一次翻一翻你的小学数学课本,老师肯定教过你辗转相除求最大公约数
好习惯,使用前先证明:
证明
设gcd(x,y)=d,则此时x=k1⋅d,y=k2⋅d 且k1,k2互质
∴gcd(y,x%y)=gcd(k2⋅d,(k1%k2)⋅d)
∵gcd(k2,k1%k2)=1
∴gcd(y,x%y)=d
∴得证
然后贴个代码:
1 2 3 4 5 6
| int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); }
|