Cod sursa(job #1379303)

Utilizator ericutzdevilEric Spataru ericutzdevil Data 6 martie 2015 17:21:00
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<cstdio>
#define nrmax 1000000

using namespace std;
char ciur[nrmax+1];

void ciurr(){
    long long d,i;
    d=2;
    while(d*d<=nrmax){
        for(i=2;i*i<=nrmax;i++){
            ciur[d*i]=1;}
        d++;
        while(ciur[d]==1){
            d++;}}}

long long suma(long long nr){
    long long sumdiv,i,f,p;
    sumdiv=1;
    for(i=2;i<=nr;i++){
        if(ciur[i]==0){
            f=1;
            p=0;
            while(nr%i==0){
                nr=nr/i;
                p++;
                f=f*i;}
            if(p!=0){
                f=f*i-1;
                sumdiv*=(f/(i-1));
                sumdiv%=9973;}}}
    if(nr!=1)
        sumdiv*=(nr*nr-1)/(nr-1);
    sumdiv%=9973;
    return sumdiv;}

long long nrdiv(long long nr){
    long long d=2,p,tau=1;
    while(nr>1){
        p=0;
        while(nr%d==0){
            nr=nr/d;
            p++;}
        tau*=(p+1);
        tau%=9973;
        d++;}
    return tau;}

int main()

{

freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);

long long n,i,nr,sdiv,nd;
scanf("%lld",&n);
ciurr();
for(i=1;i<=n;i++){
    scanf("%lld",&nr);
    nd=nrdiv(nr);
    sdiv=suma(nr);
    printf("%lld %lld\n",nd%9973,sdiv%9973);}

return 0;
}