#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define MAX 40000
using namespace std;
bool isprime[MAX];
int prime[MAX],nprime;
void doprime ( )
{
long long i,j;
nprime = 0;
memset ( isprime , true , sizeof ( isprime ) );
isprime[1] = false;
for ( int i = 2 ; i < MAX ; i++ )
{
if ( isprime[i] )
{
prime[++nprime] = i;
for ( j = i*i ; j < MAX ; j+=i )
isprime[j] = false;
}
}
}
bool check ( int n )
{
if ( n == 1 ) return 0;
int i,k = ( int ) sqrt ( double (n ) );
for ( i = 1 ; prime[i] <= k ; i++ )
if ( n%prime[i] == 0 )
return 0;
return 1;
}
int main ( )
{
doprime ( );
long long n;
while ( ~scanf ( "%lld" , &n ) )
{
long long minn = n+5;
if ( check ( n ) )
{
puts ( "1" );
continue;
}
for ( long long i = 2 ; i*i <= n ; i++ )
{
if ( n%i ) continue;
if ( check( i ) ) minn = min ( minn , n/i );
if ( check( n/i ) ) minn = min ( minn , i );
}
if ( minn == n+5 ) puts ( "0" );
else printf ( "%lld\n" , minn );
}
}
hdu 5108 高效筛素数法模板题
最新推荐文章于 2021-08-13 16:28:11 发布