Cod sursa(job #1823749)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 6 decembrie 2016 19:55:54
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <string.h>
#define MOD 9973

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

long long result = 1;

while (b){

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

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

return result;
}

int main(){

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

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

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

while(T--){

    nDiv = 1;
    Sum = 1;

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

    M = N;

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

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

return 0;
}