Cod sursa(job #1465264)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 26 iulie 2015 21:11:36
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<cstdio>
#define mod 9973
using namespace std;
char ciur[1000010];
long long prime[80000],div[30];
void ciurr(long long nrmax){
    long long prim=2,m;
    while(prim*prim<=nrmax){
        for(m=prim;m<=nrmax/prim;m++)
            ciur[m*prim]=1;
        prim++;
        while(ciur[prim]==1)
            prim++;
    }
    for(m=2;m<=nrmax;m++)
        if(ciur[m]==0){
            prime[0]++;
            prime[prime[0]]=m;
        }
}
int main (){
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    long long sum,t,i,q,n,nrdiv,put,p;
    ciurr(1000000);
    scanf("%lld",&t);
    for(q=1;q<=t;q++){
        scanf("%lld",&n);
        sum=1;
        nrdiv=1;
        for(i=1;i<=prime[0]&&prime[i]*prime[i]<=n;i++)
            if(n%prime[i]==0){
                put=0;
                p=1;
                while(n%prime[i]==0){
                    put++;
                    p*=prime[i];
                    n/=prime[i];
                }
                p*=prime[i];
                nrdiv=(nrdiv*(put+1))%mod;
                sum=((sum*(p-1))/(prime[i]-1))%mod;
            }
        if(n!=1){
            nrdiv=(nrdiv*2)%mod;
            sum=(sum*(n+1))%mod;
        }
        printf("%lld %lld\n",nrdiv,sum);
    }
    return 0;
}