UVa – 11466 – Largest prime divisors

#include <bits/stdc++.h>

using namespace std;

bool p[40000000];

vector<long long> prime;


void sieve(long long n)
{
    p[0]=p[1]=1;

    for(long long i=2; i<n;)
    {
        prime.push_back(i);
        for(long long j=i*i; j<n; j+=i)
        {
            p[j]=1;
        }
        for(++i;; i++)
        {
            if(!p[i]) break;
        }
    }
}

int main()
{
    //freopen("in.txt","r",stdin);
    long long i,c,d,n;
    sieve(35000000);
    while(cin>>n)
    {
        if(n==0)
        {
            break;
        }
        c=0;
        d=0;
        n=abs(n);
        for(i=0; i<prime.size()  && prime[i]*prime[i]<=n; i++)
        {

            if(n%prime[i]==0)
            {
                c++;
                d=max(d,prime[i]);
                while(n%prime[i]==0)
                {
                    n/=prime[i];

                }
            }
        }

        if(n>1)
        {
            d=max(d,n);
            c++;
        }

        if(c<=1)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            cout<<d<<endl;
        }
    }
    return 0;
}

Leave a comment