Cod sursa(job #650545)

Utilizator FIIBCPBuzila Octavian Calin FIIBCP Data 18 decembrie 2011 13:43:23
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include<stdlib.h>
int v[1000001];
int prim[100000];
FILE *f,*g;

  


 
 void ciur(){
 int j,i;
 prim[0]=1;
 prim[1]=2;
     for(i=3;i<=1000000;i+=2){
        if(v[i]==0){
            prim[++prim[0]]=i;
       for(j=3*i;j<=1000000;j+=2*i)
            v[j]=1;
                    }
                               }
 }
  
 void sol(long long nr)
 {
 
        long long y, sum, t, i, exp;
          y=sum=1;
       for(i=1; prim[i]*prim[i]<=nr ;i++){
        if(nr%prim[i]==0){
            exp=1;
          t=prim[i];
          while(nr%prim[i]==0){
              exp++;
             nr=nr/prim[i];
              t=t*prim[i];}
       y*=exp;
       sum*=(t-1)/(prim[i]-1)%9973;}}
    if(nr!=1){
        sum*=(nr*nr-1)/(nr-1)%9973;
       y*=2;}
    fprintf(g,"%lld %lld",y,sum%9973);
 }
  
int main()
{
   f=fopen("ssnd.in","r");
     g=fopen("ssnd.out","w");
    long long n, nr;
   ciur();
    fscanf(f,"%lld",&n);
   while(n--){
       fscanf(f,"%lld",nr);
       sol(nr);}
       fclose(f);fclose(g);
    return 0;
}