Pagini recente » Cod sursa (job #2960646) | Cod sursa (job #2287791) | Cod sursa (job #904906) | Cod sursa (job #2480924) | Cod sursa (job #756676)
Cod sursa(job #756676)
#include<fstream>
#define nmax 1000000
#define mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool v[1000001];
int N, A, p[nmax/2], Nr;
int x = 0, y = 0, d = 0;
void ciur()
{
v[0] = v[1] =true;
for(int i = 2; i <= nmax; i++)
if(v[i] == false)
for(int j = i + i; j <= nmax; j +=i)
v[j] = true;
for(int i = 1; i <= nmax; i++ )
if(v[i] == false)
p[++Nr] = i;
}
//
//void euclid(int a, int b, int &d, int &x, int &y)
//{
// if(b == 0)
// {
// d = a;
// x = 1;
// y = 0;
//
// }
// else
// {
// int x0, y0;
// euclid(b, a%b, d, x0, y0 );
// x = y0;
// y = x0 - (a/b) * y0;
// }
//}
//int calc_invers(int z)
//{
//
// euclid(z, mod, d, x, y);
// while( x < 0 )
// x += mod;
// return x % mod;
//}
long long rid(int x, int y)
{
if(!y) return 1;
if(y % 2 == 0){
int t = rid(x, y /2) % mod;
return (t * t) %mod;}
else
return (x *rid(x, y - 1)) %mod;
}
void desc(int A)
{
long long nk = 0, S = 1, Nr_div = 1;
for(int i = 1; p[i] * p[i] <= A ; i++)
{
if(A % p[i] == 0)
{
nk = 0;
while(A % p[i] == 0)
A /= p[i], nk++;
Nr_div *= (nk + 1);
long long aux1 = (rid(p[i], nk + 1) - 1 )% mod;
long long aux2 = (rid(p[i] - 1, mod - 2)) %mod;
S =(((S * aux1) %mod ) * aux2 )%mod;
}
}
if( A != 1)
Nr_div *= 2, S = S *(A + 1) %mod;
fout <<Nr_div %mod << " " << S %mod <<'\n';
}
void read()
{
fin >> N;
for(int i = 1; i <= N ;i++)
fin >> A, desc(A);
//fout << rid (2, 10);
}
int main()
{
ciur();
read();
fin.close();
return 0;
}