题目大意:在数n的因子中求满足其不是任意一个数的平方的倍数的最大因子
解题思路:对于一个数n(1e12),其一半的因子一定<=sqrt(n),且根据这部分因子可求出另一部分因子,则对于数n的因子,若要使其不是任一个数的平方的倍数,则将其每个因子的都除掉,对于每一个因子留一个相乘起来,即满足了该数不会是某一数的平方的倍数,另因为是乘了所有的因子,所以一定是最大的~
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+100;
int main()
{
__int64 n;
while(scanf("%I64d",&n) != EOF)
{
__int64 tmp = sqrt(n);
__int64 ans = 1;
for(__int64 i = 2; i <= tmp; i++)
{
if(n%i==0)
{
ans *= i;
while(n%i==0)
n/=i;
}
}
if(n!=1) ans *= n;
printf("%I64d\n",ans);
}
return 0;
}