Pagini recente » Cod sursa (job #1981762) | Cod sursa (job #2698299) | Cod sursa (job #1719210) | Cod sursa (job #187180) | Cod sursa (job #1095167)
#include <fstream>
#include <bitset>
#include <vector>
#define Nmax 1000000
#define pb push_back
#define X 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int T,nr,S;
long long N;
vector < int > P;
bitset < Nmax+10> v;
void Ciur()
{
P.pb(2);
for(int i=3;i<=Nmax;i+=2)
if(!v[i])
{
P.pb(i);
for(int j=2*i; j<=Nmax;j+=i)v[j]=1;
}
}
int Putere(int N,int K)
{
if(!K)return 1;
int M=1;
while(K!=1)
if(K%2==0)N=(N*N)% X,K/=2;
else M=(M*N)% X,--K;
return (M*N) % X;
}
void SSND(long long N,int &S,int &nr)
{
S=nr=1;
for(int i=0;i<P.size() && N!=1 ; ++i)
if( N % P[i]==0)
{
int k=0;
while(N % P[i]==0)N/=P[i],++k;
nr*=(k+1);
int aux=(Putere(P[i],k+1)-1+X) % X;
aux= (aux * Putere(P[i]-1,X-2))% X;
S= (S * aux) % X;
}
if(N>1)
{
nr*=2;
int aux=(Putere(N,2)-1+X) % X;
aux= (aux * Putere(N-1,X-2))% X;
S= (S * aux) % X;
}
}
int main()
{
Ciur();
f>>T;
for(int t=1;t<=T;++t)
{
f>>N;
SSND(N,S,nr);
g<<nr<<' '<<S<<'\n';
}
f.close();g.close();
return 0;
}