Cod sursa(job #1548264)

Utilizator ZimmyZimmermann Erich Zimmy Data 10 decembrie 2015 18:32:46
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <bitset>
#define MOD 9973
#define Int long long

using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bitset<1000010> P;
int k,i,t,nd,expo,p[79000];
Int Pr,sd,sum,fact,n,pr;
int main()
{
    p[++k]=2;
    for(i=3;i<=1000;i++)
        if(!P[i])
        {
            p[++k]=i;
            for(int j=i*i,step=2*i;j<=1000000;j+=step)
                P[j]=1;
        }
    for(;i<=1000000;i+=2)
        if(!P[i])
            p[++k]=i;
    f>>t;
    for(;t;t--)
    {
        f>>n;
        nd=1;
        sd=1;
        for(i=1;i<=k&&p[i]*p[i]<=n;i++)
            if(n%p[i]==0)
            {
                pr=p[i];
                Pr=pr%MOD;
                expo=1;
                sum=1;
                fact=1;
                while(n%pr==0)
                {
                    fact=(fact*Pr)%MOD;
                    sum=(sum+fact)%MOD;
                    expo++;
                    n/=pr;
                }
                nd*=expo;
                sd=(sd*sum)%MOD;

            }
        if(n>1)
        {
            nd*=2;
            sd=(sd*(n+1))%MOD;
        }
        g<<nd<<' '<<sd<<'\n';

    }
    return 0;
}