Pagini recente » Cod sursa (job #456499) | Cod sursa (job #2573731) | Istoria paginii runda/300saumalas/clasament | Cod sursa (job #2614976) | Cod sursa (job #1855144)
#include <cstdio>
#include <fstream>
using namespace std;
int q[1000],npr[500000],vp=0,baza=9973;
char used[1001000];
int invm(int a,int n)
{
//ma bazez pe q global ca sa nu mai pierd timp la alocarea la intrarea in fctzie
int i=0,x=1,y=0,r,aux,b=n;
while(b)
{
q[++i]=a/b;
r=a%b;
a=b;
b=r;
}
while(i)
{
aux=y;
y=x-q[i--]*y;
x=aux;
}
if(x<0)return (n+x)%n;
return x;
}
int rplog(int a,int b,int n)
{
a%=n;
int p=a,pr=1;
while(b)
{
if(b%2) pr=((long long)pr*p)%n;
p=((long long)p*p)%n;
b/=2;
}
return pr;
}
void ciur()
{
int k=1,lmax=1000900,p;
used[0]=used[1]=1;
while(k<=lmax)
{
while(used[k]&&k<=lmax)k++;
npr[++vp]=k;
p=2;
while(p*k<=lmax)
{
used[p*k]=1;
p++;
}
k++;
}
}
void descfp(long long n,int &nf,int &sf)
{
nf=1;
sf=1;
int id=1,p;
while((long long)npr[id]*npr[id]<=n)
{
if(n%npr[id]==0)
{
p=0;
while(n%npr[id]==0)
{
n/=npr[id];
p++;
}
nf=((long long)nf*(p+1))%baza;
int numarator=rplog(npr[id],p+1,baza)-1;
int numitor=invm(npr[id]-1,baza);
sf=((long long)sf*numarator%baza*numitor)%baza;
}
id++;
}
if(n!=1)
{
nf=((long long)nf*2)%baza;
sf=((long long)sf*(rplog(n,2,baza)-1)*invm(n-1,baza))%baza;
}
if(sf<0)sf=sf+baza;
}
int main()
{
FILE *f=fopen("ssnd.in","r");
//ifstream f("ssnd.in");
FILE *f1=fopen("ssnd.out","w");
ciur();
long long x;
int nf,sf,n,i;
fscanf(f,"%d",&n);
//f>>n;
for(i=1; i<=n; i++)
{
//f>>x;
fscanf(f,"%lld",&x);
descfp(x,nf,sf);
fprintf(f1,"%d %d\n",nf,sf);
}
return 0;
}