Cod sursa(job #654256)

Utilizator ion824Ion Ureche ion824 Data 29 decembrie 2011 22:56:29
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<cstdio>
#include<cmath>
#define MOD 9973
bool b[1000010]; 

void ciur(int n){
     for(int i=2;i<=n;++i)
       if(!b[i])
         for(int j=2;j<=n/i;++j)
           b[i*j]=1;             
     }
     
int pow1(int a,int n){
    int rez=a%MOD;
      for(int i=1;i<n;++i){
        rez*=a;
        rez%=MOD;
        }   
    return rez;    
}     

int main(void){
    FILE *fin = fopen("ssnd.in","r");
    FILE *fout = fopen("ssnd.out","w");
    int i,t,sumdiv,nrdiv,d,p,k; long long n=0; 
    fscanf(fin,"%d",&t); 
    ciur(1000000);
    while(t--){
        fscanf(fin,"%llu",&n);      
        nrdiv=1; sumdiv=1; i=2; k=int(sqrt(n));   
        for(i=2;i<=1000000;++i)if(n%i==0)fprintf(fout,"%d ",i);
        fprintf(fout,"\n"); i=2;
        while(n!=1 && i<=k){
                if(!b[i] && n%i==0){    
                    d=0;  
                    while(n%i==0 && n!=1){ ++d; n/=i;  }
                    nrdiv*=(d+1); 
                    p=(pow1(i,d+1)-1)/(i-1); sumdiv=((sumdiv%MOD)*(p%MOD))%MOD;
                    ++i;
                    }
                else  ++i;                         
                }
          if(i==k+1){ nrdiv*=2; sumdiv=((n%MOD)+sumdiv)%MOD; }      
        fprintf(fout,"%d %d\n",nrdiv,sumdiv);      
      }     
 return 0;   
}