Pagini recente » Cod sursa (job #931790) | Cod sursa (job #2422315) | Cod sursa (job #533613) | Cod sursa (job #2277811) | Cod sursa (job #2157907)
#include <iostream>
#include <fstream>
#define crmx 1000000
#define mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int n,i,j,t,np,dv[80000],NR,SUM,MARE,x,y,h;
bool b[1000010];
void invmod(int a,int b,int &x,int &y)
{
if(b==0)
{ x=1; y=0; }
else
{
int x0,y0;
invmod(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
}
}
int rlp(int a,int b)
{
int r=1;
while(b)
{
if(b%2==0)
{ b/=2; a=(a*a)%mod; }
else
{ b--; r=(r*a)%mod; }
}
return r;
}
int main (){
for(i=2;i<=crmx;i++)
if(b[i]==0)
{
np++; dv[np]=i;
for(j=2;j*i<=crmx;j++) b[i*j]=1;
}
fin>>t;
while(t)
{
fin>>n;
NR=1;
MARE=1;
int d=1;
int pt=0;
while(n!=1&&d<=np)
{
pt=0;
while(n%dv[d]==0)
{ pt++; n/=dv[d]; }
if(pt!=0)
{
NR*=pt+1;
NR%=mod;
SUM=rlp(dv[d],pt+1);
SUM=(SUM+mod-1)%mod;
invmod(dv[d]-1,mod,x,y);
if(x<0) x=(x%mod)+mod;
SUM=(SUM*x)%mod;
MARE=(MARE*SUM)%mod;
}
d++;
}
if(n>1)
{
NR=(NR*2)%mod;
SUM=(n*n+mod-1)%mod;
invmod(n-1,mod,x,y);
if(x<0) x=(x%mod)+mod;
SUM=(SUM*x)%mod;
MARE=(MARE*SUM)%mod;
}
fout<<NR<<" "<<MARE<<"\n";
t--;
}
}