Cod sursa(job #1823765)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 6 decembrie 2016 20:08:40
Problema Suma si numarul divizorilor Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <string.h>
#define MOD 9973

unsigned long long expo(unsigned long long a, unsigned long long b){

unsigned long long result = 1;

while (b){

    if (b&1){
        result = (result * a);
    }

    b >>= 1;
    a = (a * a);
}

return result;
}

int main(){

FILE *file1, *file2;
unsigned long long T, M, N, i, Sum, nDiv, power;

file1 = fopen("ssnd.in", "r");
file2 = fopen("ssnd.out", "w");

fscanf(file1, "%llu", &T);

while(T--){

    nDiv = 1;
    Sum = 1;

    fscanf(file1, "%llu", &N);

    M = N;

    for(i=2; i*i<=N; i++){
        power = 0;
        if(!(M%i)){
            while(M%i==0){
                M /= i;
                power++;
            }
            nDiv *= (power + 1);
             Sum = (Sum * ((expo(i, power+1) - 1) / (i - 1))%MOD) % MOD;

        }
        if(M==1){
            break;
        }
    }
    if(nDiv==1 && Sum==1 && N!=1){
        nDiv = 2;
        Sum += N;
    }
    fprintf(file2, "%llu %llu\n", nDiv, Sum);
}

return 0;
}