Pagini recente » Cod sursa (job #2358171) | Cod sursa (job #2133671) | Cod sursa (job #2399515) | Cod sursa (job #1063924) | Cod sursa (job #1813975)
# include <iostream>
# include <fstream>
# include <vector>
using namespace std;
# define MAX_PRIME 1000000
vector<int> primes;
bool ciur[1 + MAX_PRIME];
void calc_primes( int lim )
{
ciur[0] = ciur[1] = 1;
for ( int i = 1; i * i <= lim; i ++ )
if ( !ciur[i] )
for ( int j = i * i; j <= lim; j += i )
ciur[j] = 1;
for ( int i = 1; i <= lim; i ++ )
if ( !ciur[i] )
primes.push_back( i );
}
vector<pair<long long, int> > decompose( long long n )
{
vector<pair<long long, int> > divs;
int p, i = 0;
while ( i < primes.size()
&& primes[i] * primes[i] <= n ) {
p = 0;
while ( n % primes[i] == 0 ) {
n /= primes[i];
p ++;
}
if ( p != 0 )
divs.push_back( make_pair( primes[i], p ) );
i ++;
}
if ( n != 1 )
divs.push_back( make_pair( n, 1 ) );
return divs;
}
# define MOD 9973
void ssnd( int p, int d, const vector<pair<long long, int> > &divs, pair<int, int> &s )
{
if ( p == divs.size() ) {
s.first ++;
s.second = ( s.second + d ) % MOD;
} else {
for ( int i = 0; i <= divs[p].second; i ++ ) {
ssnd( p + 1, d, divs, s );
d = ( d * divs[p].first ) % MOD;
}
}
}
int main()
{
ifstream fin( "ssnd.in" );
ofstream fout( "ssnd.out" );
calc_primes( MAX_PRIME );
int t;
long long n;
fin >> t;
for ( int i = 0; i < t; i ++ ) {
fin >> n;
pair<int, int> s;
s.first = s.second = 0;
vector<pair<long long, int> > divs = decompose( n );
ssnd( 0, 1, divs, s );
fout << s.first << ' ' << s.second << '\n';
}
fin.close();
fout.close();
return 0;
}