Cod sursa(job #654279)

Utilizator ion824Ion Ureche ion824 Data 30 decembrie 2011 00:10:41
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<cstdio>
#include<cmath>
#define MOD 9973 

/*int pow1(int a,int n){
    int rez=a%MOD;
      for(int i=1;i<n;++i){
        rez*=a;
        rez%=MOD;
        }   
    return rez;    
}     */

inline int pow1(int x, int p){
	int rez = 1; x %= MOD;
	for(; p; p >>= 1) {
		if(p & 1) {
			rez *= x;
			rez %= MOD;
		}
		x *= x;
		x %= 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,p2; long long n=0; 
    fscanf(fin,"%d",&t); 
    while(t--){
        fscanf(fin,"%llu",&n);      
        nrdiv=1; sumdiv=1; i=1; k=int(sqrt(n));  
        for(i=2;i<=k;++i){
                if(n%i==0){    
                    d=0;  
                    while(n%i==0 && n!=1){ ++d; n/=i;  }
                    nrdiv*=(d+1); 
                    p=(pow1(i,d+1)-1)%MOD;
                    p2 = pow1(i-1, MOD-2) % MOD;
                     sumdiv=(((sumdiv*p)%MOD)*p2)%MOD;                    
                    }                        
                }
          if(n>1){ nrdiv*=2; sumdiv=((n+1)*sumdiv)%MOD; }      
        fprintf(fout,"%d %d\n",nrdiv,sumdiv);      
      }     
 return 0;   
}