Cod sursa(job #1612428)

Utilizator OlivianOlivian Dan Cretu Olivian Data 24 februarie 2016 20:50:00
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int t;
    scanf("%d",&t);
    for(int q=1; q<=t; q++)
    {
        long long n,s=1,pr=1,k=0;
        scanf("%lld",&n);
        int f=n/2;
        long long v1[f+1],p[f+1],d[f+1];
        for(int i=2; i<=f; i++)
        {
            if (v1[i]!=1 && n%i==0)
            {
                k++;
                p[k]=i;d[k]=0;
                long long x=1;
                while(n%i==0)
                {
                    d[k]++;
                    x*=p[k];x%=9973;
                    n/=i;
                }
                d[k]+=1;
                s*=d[k];
                x*=p[k];
                x-=1;
                x/=(p[k]-1);pr*=x;pr%=9973;
                if(n==1) break;
                for(int j=2*i; j<=f; j+=i)
                {
                    v1[j]=1;
                }

            }
        }
        if(n==4) printf("3 7 \n");
        else{
        if(k==0) printf("2 %lld\n",n+1);
        else printf("%lld %lld\n",s,pr);
    }
    }
}