Cod sursa(job #1521501)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 10 noiembrie 2015 16:18:47
Problema Suma si numarul divizorilor Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.36 kb
#include <stdio.h>
#define lim 1000001
#define MOD 9973
int v[500000];
char ciur[lim];
long long put(long long a,long long b){
    long long rez=1;
    while(b!=0){
        if(b%2==1){
            rez=rez*a;
            b--;
        }
        a=a*a;
        b/=2;
    }
    return rez;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("ssnd.in","r");
    fout=fopen("ssnd.out","w");
    long long i,j,x,n,nr,s,div,ap;
    for(i=2;i*i<=lim;i++){
        if(ciur[i]==0){
            for(j=i*i;j<=lim;j+=i)
                ciur[j]=1;
        }
    }
    nr=0;
    for(i=2;i<=lim;i++)
        if(ciur[i]==0){
            nr++;
            v[nr]=i;
        }
    fscanf(fin,"%lld",&n);
    for(i=1;i<=n;i++){
        fscanf(fin,"%lld",&x);
        nr=1;
        s=1;
        for(j=1;v[j]*v[j]<=x;j++){
            div=v[j];
            ap=0;
            while(x%div==0){
                ap++;
                x/=div;
            }
            nr=nr*(ap+1);
            //s=(s*(put(div,ap+1)-1)*(put(div,MOD-2)-1))%MOD;
            s=(s*(put(div,ap+1)-1)/(div-1))%MOD;

        }
        //x!=1
        if(x!=1){
            div=x;
            ap=1;
            nr=nr*(ap+1);
            s=(s*(put(div,ap+1)-1)/(div-1))%MOD;
        }
        fprintf(fout,"%lld %lld\n",nr,s);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}