题目描述
13195 的质因数有 5, 7, 13 和 29。 输入n,输出n最大的质因数。 输入 输入第一行组数T, 接下来T行,每行一个整数n。 (1 <= T <= 20) (2 <= n <= 1000000000000) 输出 对于每组数据,输出一个数,表示n最大的质因数。 输入样例 3 10 17 600851475143 输出样例 5 17 6857
题解:
用了一个求质因数的模板,然后直接输出最后一个质因数即是最大的质因数:
void get_div(ll x)//分解质因数 { for(ll i = 2; i <= (ll)sqrt(x); i++) { while(x % i == 0) { arr.push_back(i); x /= i; } } if(x != 1) { arr.push_back(x); } }代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <climits> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <deque> #include <list> #include <utility> #include <set> #include <map> #include <stack> #include <queue> #include <bitset> #include <iterator> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const ll INF = 0x3f3f3f3f3f3f3f3f; const double PI = acos(-1.0); const double E = exp(1.0); const int MOD = 1e9+7; const int MAX = 1e5+5; int t; ll n; vector <ll> arr; void get_div(ll x)//分解质因数 { for(ll i = 2; i <= (ll)sqrt(x); i++) { while(x % i == 0) { arr.push_back(i); x /= i; } } if(x != 1) { arr.push_back(x); } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t--) { cin >> n; get_div(n); cout << arr[arr.size()-1] << endl; } return 0; }