Cod sursa(job #1891309)

Utilizator AlexVulpoiuAlexandru Vulpoiu AlexVulpoiu Data 23 februarie 2017 21:47:05
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
using namespace std;
bool a[1000001];
short t;
int i,p,x,nd,sd;
long long int n;
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    a[0]=a[1]=1;
    for(nd=2;nd<=1000000;nd++)
        if(!a[nd])
            for(sd=nd*2;sd<=1000000;sd+=nd)
                a[sd]=1;
    scanf("%hd",&t);
    while(t)
    {
        scanf("%lld",&n);
        nd=sd=1;
        if(n>1)
            for(i=2;i*i<=n;i++)
                if(!a[i] && n%i==0)
                {
                    p=0;
                    x=i;
                    while(n%i==0)
                    {
                        p++;
                        x=(x*i)%9973;
                        n/=i;
                    }
                    nd*=(p+1);
                    sd=sd*(x-1)/(i-1)%9973;
                    if(n==1)
                        break;
                }
        if(n>1)
        {
            nd*=2;
            sd=(sd*(n+1))%9973;
        }
        printf("%d %d\n",nd,sd);
        t--;
    }
    return 0;
}