diff --git a/TangDou/51NOD/1928.cpp b/TangDou/51NOD/1928.cpp new file mode 100644 index 0000000..5d31bb9 --- /dev/null +++ b/TangDou/51NOD/1928.cpp @@ -0,0 +1,44 @@ +#include +using namespace std; +typedef pair PII; +vector g; +// 判断一个数是不是质数 +bool isPrime(int n) { + if (n < 2) return false; + for (int i = 2; i <= n / i; i++) + if (n % i == 0) return false; + return true; +} + +int main() { + int k; + cin >> k; + int a = 1; + while (k--) { + int p, m; + cin >> p >> m; + a *= pow(p, m); + } + a--; + + int last = -1; + + for (int i = 2; i * i <= a; i++) { // 遍历所有小因子 + if (a % i > 0 || !isPrime(i)) continue; // 不是因子 或者 不是质数 + + // 如果数字a除以这个质数因子i,商a/i也是一个质数因子,它是最后一个最大的质数因子,只能有1个 + if (isPrime(a / i) && a / i > i) last = a / i; + + int x = a; + int cnt = 0; + while (x % i == 0) { + cnt++; + x /= i; + } + if (cnt > 0) g.push_back({i, cnt}); + } + if (~last) g.push_back({last, 1}); + for (int i = g.size() - 1; i >= 0; i--) + cout << g[i].first << " " << g[i].second << endl; + return 0; +} \ No newline at end of file