Cod sursa(job #1843576)

Utilizator raduzxstefanescu radu raduzx Data 8 ianuarie 2017 21:57:52
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
#define MOD 9973
bool v[1000004];
long long nrp[1000000];
/*inline long long putere(long long x,long long p)
{
    long long s=1,cx=1,i;
    for(i=1;i<=p;i++)
    {
        cx*=x;
        s+=cx;
        s%=MOD;
        cx%=MOD;
    }
    return s;
}*/
int main()
{
    long long t,i,j;
    f>>t;
    for(i=2;i<=1000005;i++)
    {
        if(v[i]==0)
        {
            j=i;
            j+=i;
            while(j<=1000005)
            {
                v[j]=1;
                j+=i;
            }
        }
    }
    long long prim=0;
    for(i=2;i<=1000005;i++)
    {
        if(v[i]==0)
        {
            prim+=1;
            nrp[prim]=i;
        }
    }
    long long a,n,s,p,e,d,k,w;
    for(j=1;j<=t;j++)
    {
        f>>a;
        s=a;
        p=1;
        e=1;
        d=1;
        while(nrp[d]*nrp[d]<=s)
        {
            if(s%nrp[d]==0)
            {

            k=0;
            w=nrp[d];
            while(s%nrp[d]==0)
            {
                s/=nrp[d];
                w*=nrp[d];
                k+=1;
            }
            p*=(k+1);
            e*=(((w-1))/(nrp[d]-1)%MOD);
            e%=MOD;
            }
            d+=1;
        }
        if(s>1)
        {
            p*=2;
            e*=(s+1)%MOD;
            e%=MOD;
        }
        g<<p<<" "<<e<<'\n';
    }
    f.close();
    g.close();
    return 0;
}