Cod sursa(job #1193498)

Utilizator Mirc100Mircea Octavian Mirc100 Data 31 mai 2014 21:41:10
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>

using namespace std;
const long MAX=1000001;
int 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;i<=nrdivprim;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;
			
		}	

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