Cod sursa(job #496967)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 31 octombrie 2010 18:21:43
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#include <bitset>
using namespace std;
bitset <1000500> m;
long a[100000];
int main()
{
 freopen("ssnd.in","r",stdin);
 freopen("ssnd.out","w",stdout);
 long nr,i,j,k,q,r1;
 long long x,r2,s,t;
 a[1]=2;
 q=1;
 for(i=3;i<1000500;i+=2)
    if(!m[i])
      {a[++q]=i;
       for(j=3*i;j<1000500;j+=i<<1)
       m[j]=1;}
 scanf("%ld",&nr);
 while (nr--)
   {scanf("%lld",&x);
    j=r1=r2=1;
    while((long long)a[j]*a[j]<=x)
       {s=t=1;
        k=0;
        while(x%a[j]==0)
          {x/=a[j];
           k++;
           s=(s*a[j])%9973;
           t=(t+s)%9973;}
        r1*=k+1;
        r2=(r2*t)%9973;
       j++;}
    if(x>1)
      {r1<<=1;
       r2=(r2*(x+1))%9973;}
    printf("%ld %lld\n",r1,r2);}
return 0;}