题解 | Problem C
#include <bits/stdc++.h> #include <cctype> using namespace std; int get_prime_factor(int a) { if (a == 1 || a == 2)return a; for (int i = 2; i <= sqrt(a); i++) { if (a % i == 0) { return max(get_prime_factor(a / i), i); } } return a; } int main() { int n; while (cin >> n) { while (n--) { string s; cin >> s; int ans = 0; for (int i = 0; i < s.size(); i++) { if (isdigit(s[i])) { ans *= 10; ans += s[i] - '0'; } } cout<<get_prime_factor(ans)<<endl; } } }
依靠isdigit函数判断是否为int,组合成int目标数,然后我们只需要计算出来他的最大质因数即可,计算方法是递归法