题解 | Problem C
Problem C
https://www.nowcoder.com/practice/2a05dcaa4cde4db989443f206ee3e5c5
#include <iostream> #include<cmath> using namespace std; // bool isprime(int val) { // if (val <= 1 || (val != 2 && val % 2 == 0))return false; // for (int i = 3; i <= sqrt(val); i = i + 2) { // if (val % i == 0)return false; // } // return true; // } int factor(int num) { if (num <= 2)return num; int max_factor = -1; while(num%2==0){ max_factor=2; num=num/2; } for (int i = 3; i <= sqrt(num); i = i + 2) { while (num % i == 0 ) { max_factor=i; num=num/i; } } if(num>max_factor)max_factor=num; return max_factor; } int main() { int a, b; while (cin >> a) { // 注意 while 处理多个 case string s; cin.ignore(); for (int i = 0; i < a; i++) { b = 0; getline(cin, s); for (int i = 0; i < s.length(); i++) { if (s[i] >= '0' && s[i] <= '9')b = b * 10 + s[i] - '0'; } // cout<<b<<endl; if (b == 0)cout << 0 << endl; else cout << factor(b) << endl; } } } // 64 位输出请用 printf("%lld")