Cod sursa(job #875744)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 10 februarie 2013 18:54:52
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#define mod 9973
#define N 1000005
using namespace std;
bool viz[N];
int p[N],k;
void ciur()
{ int i,j;
for(i=2;i<N;++i)
    if(viz[i]==0)
        {
        p[++k]=i;
        for(j=i+i;j<N;j+=i)
            viz[j]=1;
        }
}
int main()
{ int n,nr,sd,i,d,y;
  long long x;
k=0;
ciur();
freopen("ssnd.in","r",stdin); freopen("ssnd.out","w",stdout);
scanf("%d\n",&n);
for(;n>=1;--n)
    {
    scanf("%I64d\n",&x);
    nr=1; sd=1;
    for(i=1;p[i]*p[i]<=x;++i)
      if(x%p[i]==0)
            {
            d=0; y=1;
            while(x%p[i]==0)
                {
                x/=p[i]; ++d; y=y*p[i];
                }
            y=(y*p[i]-1)/(p[i]-1); sd=(sd*y)%mod;
            nr=nr*(d+1);
            }
    if(x!=1)
        {
        y=(x*x-1)/(x-1); sd=(sd*y)%mod;
        nr=nr*2;
        }
    printf("%d %d\n",nr,sd);
    }
fclose(stdin);
fclose(stdout);
return 0;
}