AcWing 3815. 最大约数
题目描述
一个正整数 被称为一个可爱数当且仅当不存在任何正整数 满足 是 的约数。
给定一个正整数 ,请计算并输出 的所有约数中,属于可爱数的最大约数。
输入格式
第一行包含整数 ,表示共有 组测试数据。
每组数据占一行,包含一个整数 。
输出格式
每组数据输出一行结果。
数据范围
,
样例
输入样例:
2
10
12
输出样例:
10
6
思路
任意正整数 都可以分解质因数成 。
可爱数 同样的可以被分解质因数成 ,只不过, 。
对于 的任意约数 ,如果 是可爱数,同样可以被分解质因数: ,且 。
要使得 尽量大,则 。 , 。
所以给 的所有质因数相乘,就是答案。
分解质因数完成后, 的取值有两种情况:
所以结束后,当 时,还得乘个 。
代码
C++
#include <iostream>
using namespace std;
typedef long long LL;
int main()
{
int T;
cin >> T;
while ( T-- )
{
LL n, res = 1;
cin >> n;
for ( int i = 2; i <= n / i; i ++ )
if ( n % i == 0 )
{
res *= i;
while ( n % i == 0 ) n /= i;
}
res *= n;
cout << res << endl;
}
return 0;
}
Java
import java.util.*;
public class Main
{
static Scanner in = new Scanner(System.in);
public static void main(String args[])
{
int T = in.nextInt();
while ( T-- > 0 )
{
long n = in.nextLong(), res = 1;
for ( int i = 2; i <= n / i; i ++ )
if ( n % i == 0 )
{
res *= i;
while ( n % i == 0 ) n /= i;
}
res *= n;
System.out.printf("%d\n", res);
}
}
}
