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