Pagini recente » Cod sursa (job #1234486) | Cod sursa (job #905476) | Cod sursa (job #1500383) | Cod sursa (job #826443) | Cod sursa (job #645333)
Cod sursa(job #645333)
#include<cstdio>
#include<vector>
#include<complex>
#define BIG_NUMBER 9973
using namespace std;
vector< pair<long,int> > get_divisors_power( long long n ){
int i, num;
vector< pair<long,int> > v;
num = 0;
while( n % 2 == 0 ){
++num;
n /= 2;
}
if( num > 0 ){
v.push_back( make_pair( 2, num ) );
}
for( i=3; i<=2*n; i+=2 ){
num = 0;
while( n % i == 0 ){
++num;
n /= i;
}
if( num > 0 ){
v.push_back( make_pair( i, num ) );
}
}
return v;
}
pair<int,long long> backtrack(
int index,
long long P,
vector< pair<long, int> > v
){
if( index >= v.size() ){
return make_pair( 1, (long long) P );
} else {
long long prod = 1;
int s = 0;
int n = 0;
for( int i=0; i<=v[index].second; ++i ){
pair<int, long long> back = backtrack( index+1, P*prod, v );
n += back.first;
s += (back.second % BIG_NUMBER);
prod *= v[index].first;
}
return make_pair( n, s % BIG_NUMBER);
}
}
void ssnd( long long n ){
vector< pair<long,int> > v = get_divisors_power( n );
pair<int, int> sn = backtrack( 0, 1, v );
printf("%d %d\n", sn.first, sn.second );
}
int main(){
freopen( "ssnd.in", "r", stdin );
freopen( "ssnd.out", "w", stdout );
int n,i;
long long tmp;
scanf( "%d", &n );
for( i=0; i<n; ++i ){
scanf( "%lld", &tmp );
ssnd( tmp );
}
return 0;
}