题目大意:在数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;
}
本文介绍了一种高效算法来寻找一个数的最大因子,该因子不是任意数的平方倍数。通过遍历小于等于该数平方根的所有可能因子,并去除所有因子的平方倍数,确保最终得到的乘积是最符合条件的因子。
263

被折叠的 条评论
为什么被折叠?



