Cod sursa(job #1500339)

Utilizator Balescu_OvidiuBalescu Ovidiu-Gheorghe Balescu_Ovidiu Data 11 octombrie 2015 19:25:55
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
using namespace std;

unsigned long long pow(unsigned long long n, unsigned long p){
	unsigned long long x=1;
	while(p){
		if(p&1){
			x*=n;
			p--;
		}
		n*=n;
		p>>=1;
	}
	return x;
}
unsigned long divi(unsigned long long n, unsigned long div){
	unsigned long q=0;
	while(n%div==0){
		q++;
		n/=div;
	}
	return q;
}
int main(){
    unsigned t; unsigned long long n;
    ifstream f("ssnd.in");
    f>>t;
    ofstream g("ssnd.out");
    while(t--){
        f>>n;
        unsigned long long div=2,nr=1,suma=1;
        while(div*div<=n){
			unsigned long putere=0;
            if(n%div==0)
				putere=divi(n,div);
				nr*=putere+1;
				suma*=(pow(div,putere+1)-1)/(div-1);
                if(div==2)
					div++;
				else
					div+=2;
        }
		if(nr>1)
			g<<nr<<' '<<suma%9973<<'\n';
		else
			g<<2<<' '<<n+1<<'\n';
    }
    f.close();
    g.close();
    return 0;
}