常见算法
常见算法,持续整理中
数字的运算
最大公约数
1 2 3 4
| int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
|
辗转相除法,以上算法要求a与b都是正整数,不要求a与b的大小关系。
数字的约数个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| long divisors(long a) { if (a == 1) return 1; else if (a < 1) return 0; unordered_map<long, long> primeSubNums; long ini = 2; while(a>1) { for(long i= ini; i<=a; i++) { if(a%i == 0) { a = a/i; primeSubNums[i]++; ini = i; break; } } } if (primeSubNums.size() == 1 && primeSubNums[a] > 0) { return primeSubNums.size() + 1; } else { long res = 1; for (auto i : primeSubNums) { res *= (i.second + 1); } return res; } }
|