Cod sursa(job #1496727)

Utilizator Balescu_OvidiuBalescu Ovidiu-Gheorghe Balescu_Ovidiu Data 5 octombrie 2015 15:16:01
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>

long long pow(unsigned long long n,unsigned long long p){
	long long x=1;
	while(p){
		if(p&1){
			x*=n;
			p--;
		}
		n*=n;
		p>>=1;
	}
	return x;
}
int main(){  
    unsigned t; unsigned long long n;
    FILE*f=fopen("ssnd.in","r");
    fscanf(f,"%u",&t);
    FILE*g=fopen("ssnd.out","w");
    while(t--){
        fscanf(f,"%llu",&n);
        unsigned long long q=0,Q=1,x=3,suma=1;
		while(n%2==0&&n){
			n/=2;
			q++;
		}
		if(q){
			Q*=q+1;
			suma*=pow(2,q+1)-1;
		}
        while(n>1){
			q=0;
			while(n%x==0){
				q++;
				n/=x;
			}
			if(q){
				Q*=q+1;
				suma*=(pow(x,q+1)-1)/(x-1);
			}
			x+=2;
        }
		if(Q==1)
			q=2;
        fprintf(g,"%u ",Q);
		fprintf(g,"%llu\n",suma);
    }
    fclose(f);
    fclose(g);
    return 0;
}