Cod sursa(job #1193507)

Utilizator Mirc100Mircea Octavian Mirc100 Data 31 mai 2014 22:06:49
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream>

using namespace std;
const long MAX=1000001;
bool prim[MAX];
long long divprim[MAX],nrdivprim;
void eratostene(){
    nrdivprim=0;
    for(long i=2;i<MAX;i++){
		
    	if(prim[i]==0){
			nrdivprim++;
			divprim[nrdivprim]=i; 
			for(long j=i*2;j<MAX;j+=i)
    			prim[j]=1;
		}			
	}
}

long long power(long long x, long long n){
    if(n==1)
        return x;
    long long p=power(x,n/2);
    if(n%2==0){
         
        return p*p;
    }
    else
        return p*p*x;
}
 


int main(){
	ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    int n,nr;
    fin>>n;
    eratostene();
    long  long x,sum,div,d;
    while(fin>>x){ 
		nr=1; //nr de div
		sum=1;//suma div

	
		for(long i=1;divprim[i]<=x/2;i++){
		
				long long div=divprim[i] ;
	
				d=0;
	
				while(x%div==0){
					d++;
					x/=div;
				}
			
				if(d>0){
					
					nr*=(d+1);
					sum=sum*((power(div,d+1)-1)/(div-1))%9973;
				}
				if(x==1)
					break;
			
		}
		if(x>1){
			nr*=2;
	
			sum=sum*((power(x,2)-1)/(x-1))%9973;
		}

		fout<<nr<<" "<<sum<<"\n";
		
    }
    return 0;
}