Pagini recente » Cod sursa (job #2336271) | Cod sursa (job #1998122) | Cod sursa (job #1744587) | Cod sursa (job #2554928) | Cod sursa (job #2479890)
#include <iostream>
#include <fstream>
#define MAX 1000000
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long int prime[MAX], k_prime=0;
int ciur[MAX];
long long int number_divisors, sum_divisors;
void generate_ciur()
{
for(int i=2; i<=MAX; i++)
if(!ciur[i])
{
prime[k_prime++]=i;
for(int j=i+i; j<=MAX; j+=i)
ciur[j]=1;
}
}
long long int ridicare_la_putere(long long int baza, long long int putere)
{
long long int rezultat=1;
while(putere)
{
if(putere%2==0)
{
baza=(baza*baza)%MOD;
putere/=2;
}
else
{
putere--;
rezultat=(rezultat*baza)%MOD;
}
}
return rezultat;
}
long long int cmmdc;
pair<long long int, long long int> euclid_extins(long long int x, long long int y)
{
if(y==0)
{
cmmdc=x;
return {1,0};
}
auto p=euclid_extins(y,x%y);
return {p.second, p.first-(x/y)*p.second};
}
long long int factor(long long int divizor, long long int putere)
{
long long int put=ridicare_la_putere(divizor,putere+1)-1;
if(put<0)
put+=MOD;
auto p=euclid_extins(divizor-1,MOD);
if(p.first<0)
p.first+=MOD;
return (put*p.first)%MOD;
}
void descomp(long long int x)
{
for(int i=0; i<k_prime&&prime[i]*prime[i]<=x; i++)
{
long long int prim=prime[i];
if(x%prim==0)
{
long long int putere=0;
while(x%prim==0)
{
x/=prim;
putere++;
}
if(putere)
{
number_divisors=(number_divisors*(putere+1))%MOD;
sum_divisors=(sum_divisors*factor(prim,putere))%MOD;
}
}
}
if(x!=1)
{
number_divisors=(number_divisors*2)%MOD;
sum_divisors=(sum_divisors*factor(x,1))%MOD;
}
}
void read()
{
generate_ciur();
int t;
fin>>t;
for(int i=0;i<t;i++)
{
long long int x;
fin>>x;
sum_divisors=number_divisors=1;
descomp(x);
fout<<number_divisors<<" "<<sum_divisors<<"\n";
}
}
int main()
{
read();
return 0;
}