11466

There should be a better approach to improve the time complexity.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>

#define ull unsigned long long
#define ll long long

using namespace std;

bool prime[35000000];
vector<int> prm;


int main()
{
	double n;
	int mxprime,cnt;
	ull num;
	for(int i=2;i<35000000;i++)
	{
		if(prime[i]==0)
		{
			prm.push_back(i);
			for(int j=i+i;j<35000000;j+=i)
			{
				prime[j]=1;
			}
		}
	}
	while(scanf("%lf",&n),n!=0)
	{
		mxprime=-1;
		if(n<0)
		num=n*(-1);
		else
		num=n;
		if(n==1 || n==2 || n==3)
		{
			printf("-1\n");
		}
		else
		{
			int idx=prm.size();
			cnt=0;
			for(int i=0;i<idx;i++)
			{
				if(num<prm[i])
				break;
				if(num%prm[i]==0)
				{
					mxprime= (mxprime>prm[i]?mxprime:prm[i]);
					cnt+=1;
				}
				while(num%prm[i]==0)
				{
					num/=prm[i];
				}
			}
			if(num==1)
			{
				if(n!=mxprime)
				{
					if(cnt>1)
					printf("%d\n",mxprime);
					else
					printf("-1\n");
				}

				else
				printf("-1\n");
			}
			else
			{
				if(mxprime<num)
				printf("%llu\n",num);
				else
				{
					if(cnt>1)
					printf("%d\n",mxprime);
					else
					printf("-1\n");
				}
			}
		}

	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *