Cod sursa(job #1823796)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 6 decembrie 2016 20:44:50
Problema Suma si numarul divizorilor Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.25 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;
    power = 0;

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

    M = N;

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

    for(i=3; i<=N/2; i+=2){
        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;
}