| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Show My code~~~~~~~0MS!!!!Sample Input
-2147483648
-2147483647
-64
-8
17
25
72
1073741824
2147483646
2147483647
Sample Output
31
1
3
3
1
2
1
30
1
1
#include <iostream>
#include <cmath>
#include <map>
using namespace std;
int n,p,i,cnt;
map<int,int> set;
map<int,int> ::iterator it;
bool isprime(int x)
{
if( x == 1)
return false;
int i,qrt = (int) sqrt(x*1.0) + 1;
for ( i = 2; i < qrt; ++i )
if( x % i == 0)
break;
if( i == qrt)
return true;
return false;
}
void cut(int x)
{
if( x == 1){
return;
}
if ( isprime( x ) ) {
set[x]++;
return;
}
int k,qrt = (int) sqrt(x*1.0) + 1;
for ( k = 2; k < qrt; ++k){
if( x % k == 0){
if ( isprime( k ) ) {
set[k]++;
cut(x/k);
break;
}
}
}
}
int main()
{
while ( ~scanf("%ld",&n) && n ) {
if( n == -2147483648 )
p = 31;
else{
cut( abs( n ) );
p = 1;
if( set.size() != 0 ) {
for ( it = set.begin(); it != set.end(); ++it ) {
if(it == set.begin())
cnt = (*it).second;
else if((*it).second < cnt )
cnt = (*it).second;
}
for ( i = cnt; i > 0; --i) {
for ( it = set.begin(); it != set.end(); ++it )
if((*it).second % i != 0 )
break;
if(it == set.end()){
p = i;
break;
}
}
if( n < 0)
while ( p % 2 == 0)
p /= 2;
}
set.clear();
}
printf("%d\n",p);
}
system("pause");
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator