Pagini recente » Cod sursa (job #1302580) | Cod sursa (job #2322927) | Cod sursa (job #545838) | Cod sursa (job #2340200) | Cod sursa (job #645331)
Cod sursa(job #645331)
#include<cstdio>
#include<vector>
#include<complex>
#define BIG_NUMBER 9973
using namespace std;
vector< pair<int,int> > get_divisors_power( int n ){
int i, num;
vector< pair<int,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,int> backtrack(
int index,
int P,
int N,
int S,
vector< pair<int, int> > v
){
if( index >= v.size() ){
return make_pair( N+1, S+P );
} else {
int prod = 1;
int s = 0;
int n = 0;
for( int i=0; i<=v[index].second; ++i ){
pair<int, int> back = backtrack( index+1, P*prod, 0, 0, v );
n += back.first;
s += back.second;
prod *= v[index].first;
}
return make_pair( N+n, S+s );
}
}
void ssnd( long n ){
vector< pair<int,int> > v = get_divisors_power( n );
pair<int, int> sn = backtrack( 0, 1, 0, 0, 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 tmp;
scanf( "%d", &n );
for( i=0; i<n; ++i ){
scanf( "%ld", &tmp );
ssnd( tmp );
}
return 0;
}