Pagini recente » Cod sursa (job #1648556) | Cod sursa (job #1363322) | Cod sursa (job #1938669) | Cod sursa (job #103248) | Cod sursa (job #799522)
Cod sursa(job #799522)
#include <fstream>
#define LL long long
#define MOD 9973
using namespace std;
int t,nr;
LL n,nrdiv;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int MAXSIZE = 1000001;
int r [80000];
char w [MAXSIZE]; //w[i] == 0 if i is prime
inline void ciur()
{ int i, j;
for (i = 2; i <= 1000000; ++i)
if (w[i] == 0)
{ r[++nr]=i;
for (j = i + i; j <= 1000000; j += i) w[j] = 1;
}
}
inline LL calc(LL a, int k)
{ LL p=a;
while(--k) p*=a;
return p;
}
inline void desc( LL n )
{ int i = 1,d;
LL nrdiv=1,prod,sum=1;
while(r[i]*r[i]<=n)
{ if(!(n%r[i]))
{
d = 0; prod=1;
while(!(n%r[i]))
{ d++;
n/=r[i];
}
d++;
//prod = calc(r[i],d)-1;
prod = ((calc(r[i],d)-1) / (r[i]-1)) % MOD;
sum = (sum * prod) % MOD;
nrdiv = nrdiv * d;
}
++i;
}
if(n>1)
{ nrdiv = nrdiv * 2;
sum = (sum * (n+1)) % MOD;
}
g<<nrdiv<<' '<<sum<<'\n';
}
int main()
{
ciur();
f >> t;
while(t--)
{
f >> n;
desc( n );
}
g.close(); return 0;
}
/*
#include <stdio.h>
char nuprim[1000002];
int p[300000];
int main()
{
FILE *f, *g;
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
int i,j,t,nr=0, e;
long long n,numar,suma,pu;
fscanf(f,"%d",&t);
//printf("am ajuns aici\n");
for(i=2;i*i<=1000000;i++)
{
if(nuprim[i]==0)
{
for(j=i*i;j<=1000000;j+=i) nuprim[j]=1;
}
}
//printf("am ajuns aici\n");
for(i=2;i<=1000000;i++) if(nuprim[i]==0) p[++nr]=i;
for(i=1;i<=t;i++)
{
//printf("am ajuns aici\n");
numar=1; suma=1;
fscanf(f,"%lld",&n);
for(j=1;(long long) p[j]*p[j]<=n;j++)
{
if(n%p[j]==0)
{
pu=1; e=0;
while(n%p[j]==0)
{
e++;
pu*=p[j];
n/=p[j];
}
numar*=(e+1);
suma=(suma*(pu*p[j]-1)/(p[j]-1))%9973;
}
}
//printf("am ajuns aici\n");
if(n!=1)
{
numar*=2;
suma=(suma*(n+1))%9973;
}
fprintf(g,"%lld %lld\n",numar,suma);
}
return 0;
}
*/