Pagini recente » Cod sursa (job #3004731) | Cod sursa (job #1032795) | Cod sursa (job #2931627) | Cod sursa (job #879702) | Cod sursa (job #2335112)
// w[i] este 0 daca 2*i+1 e numar prim si 1 daca nu.
#include <fstream>
#define LL unsigned long long
#define M 9973
using namespace std;
ifstream f("ssnd.in"); ofstream g("ssnd.out");
LL t,nr,N,pr2[250000],S,Div;
bool w[500010];
void ciur()
{LL i,j;
pr2[0]=2; nr=0;
for(i=1;i<=500000;i++)
{
if(!w[i])
{pr2[++nr]=2*i+1;
for(j=2*i*i+2*i;j<=500000;j+=2*i+1) w[j]=true;
}
}
}
inline LL pow(LL c, LL p)
{LL R=1;
while(p>0)
{if(p&1) R*=c;
c*=c;
p>>=1;
}
return R;
}
void factori()
{LL c,p,i,j;
S=Div=1;
for(i=0;pr2[i]*pr2[i]<=N && N>1;i++)
{if(N%pr2[i]==0)
{c=pr2[i]; p=0;
while(N%c==0) {N/=c; p++;}
//LL p1=(pow(c,p+1)-1);
LL p1=0,p2=1;
for(j=0;j<=p;j++) {p1+=p2; p2=p2*c;}
//LL p2= c-1;
//S=S*p1/p2;
S*=p1; S%=M;
Div*=(p+1);
}
}
if(N>1)
{
Div<<=1;
S*=((1LL*(N+1)) % M);
S%=M;
}
}
int main()
{f>>t;
ciur();
while(t)
{f>>N;
factori();
g<<Div<<" "<<S<<'\n';
t--;
}
g.close();
}