游客 Signup | Login
中文 | En

3053 - 最大完全平方因子

Q学长是一个完全平方数控,有一天他想到了一个有趣的问题,给你一个数N,求它的因子数中,是完全平方数的最大的那个数是多少,怎么样这个问题很简单吧,所以请各位帮Q学长解决一下。

Input

输入数据有多组,输入一个数N1<=N<=10^18

Output

对于每组数据N,输出N的因子中是完全平方数的最大的那个数。

Examples

Input

72

Output

36

Hint

72的完全平方因子有4 9 36 最大的必然是36了。

Solution C++

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const long long maxn=1000005;
const long long N=96000;
long long cnt;
long long n;
bool is_prime[maxn];
long long prime[maxn];
long long a[N];

void dabiao()
{
    is_prime[0]=is_prime[1]=1;
    long long  i;
    for(i=2;i<=maxn;i++)
    {
        is_prime[i]=0;
    }
    for(i=2;i<=maxn;i++)
    {
        if(is_prime[i]!=0)
        {
            continue;
        }
        for(long long  j=2*i;j<=maxn;j+=i)
        {
            is_prime[j]=1;
        }
    }
    cnt=0;
    for(long long i=2;i<=maxn;i++)
    {
        if(is_prime[i]==0)
        {
            prime[cnt++]=i;
        }
    }
}
int main()
{
   // freopen( "D.txt", "r", stdin );
   // freopen( "_D.txt", "w", stdout );
    dabiao();
    while(cin>>n)
    {
        long long res=1,tmp=0;
        for(long long i=0;i<cnt&&prime[i]<=n;i++)
        {
            if(n%prime[i]==0)
            {
                tmp=0;
                while(n%prime[i]==0)
                {
                    n/=prime[i];
                    tmp++;


                }
                if(tmp&1) tmp--;
                for(int j=0;j<tmp;j++) res*=prime[i];
            }
        }
        if(n!=1)
        {
            long long x=(long long )(sqrt(n+0.0));
            if(x*x==n)
            {
                res*=n;
            }
        }
        cout<<res<<endl;
    }
    return 0;
}

Hint

72的完全平方因子有4 9 36 最大的必然是36了。

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题