Cod sursa(job #1832017)

Utilizator Balescu_OvidiuBalescu Ovidiu-Gheorghe Balescu_Ovidiu Data 19 decembrie 2016 11:54:52
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <stdlib.h>

bool a[1000000];

void get_div(unsigned long n,unsigned long div,unsigned long &nr,unsigned long &sum){
    unsigned long exp=1,p=0;
    while(n%div==0){
        p++;
        exp*=div;
        n/=div;
    }
    nr*=p+1;
    sum*=(exp*div-1)/(div-1)%9973;
}
int main(){
    for(unsigned long i=3;i<=999997;i+=2)
        if(!a[i])
            for(unsigned long j=3;j*i<=999997;j+=2)
                a[i*j]=1;
    freopen("ssnd.in","r",stdin);
    unsigned t;
    scanf("%u",&t);
    freopen("ssnd.out","w",stdout);
    while(t--){
        unsigned long n,nr=1,sum=1;
        scanf("%lu",&n);
        if(n%2==0)
            get_div(n,2,nr,sum);
        for(unsigned long div=3;div*div<=n;div+=2)
            if(!a[div]&&n%div==0)
                get_div(n,div,nr,sum);
        if(nr==1&&sum==1){
            nr=2;
            sum+=n;
        }
        printf("%lu %lu\n",nr,sum%9973);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}