Cod sursa(job #1464432)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 23 iulie 2015 15:35:59
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>

using namespace std;

const int mod=9973;
long long v1[100][2];
char vaz[1000010];
int v[1000000];

int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int t,k,s,nr=0;
    long long n,c,nrd;
    scanf("%d",&t);
    for(int i=2;i<=1000000;i++)
        if(vaz[i]==0)
        {
            v[++nr]=i;
            for(long long j=1LL*i*i;j<=1000000;j=j+i) vaz[j]=1;
        }
    for(int i=1;i<=t;i++)
    {
        k=0;
        scanf("%lld",&n);
        for(int j=1;j<=nr;j++)
            if(n%v[j]==0)
            {
                v1[++k][0]=v[j];
                while(n%v[j]==0)
                {
                    v1[k][1]++;
                    n=n/v[j];
                }
            }
        if(n>1) {v1[++k][0]=n;v1[k][1]=1;}
        nrd=s=1;
        for(int j=1;j<=k;j++)
        {
            nrd=nrd*(v1[j][1]+1);
            c=1;
            for(int l=1;l<=v1[j][1]+1;l++) c=c*v1[j][0];
            s=(1LL*s*((c-1)/(v1[j][0]-1)))%mod;
        }
        for(int j=1;j<=k;j++) v1[j][0]=v1[j][1]=0;
        printf("%lld %d\n",nrd,s);
    }
    return 0;
}