Cod sursa(job #1721848)

Utilizator refugiatBoni Daniel Stefan refugiat Data 26 iunie 2016 17:02:35
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<iostream>
#include<fstream>
#include<bitset>
#define nmax 1000005
using namespace std;
long long prime[nmax];
bitset<nmax> ciur;
int nrp=1;
ifstream si("ssnd.in");
ofstream so("ssnd.out");

void erat()
{
    long long i,j,k;
    prime[0]=2;
    for(i=3;i<=nmax;i=i+2)
    {
        if(ciur[i]==0)
        {
            prime[nrp]=i;
            nrp=nrp+1;
            k=i+i;
            for(j=i+k;j<=nmax;j=j+k)
            {
                ciur[j]=1;
            }
        }
    }

}
int main()
{
    int q;
    si>>q;
    erat();
    while(q--)
    {
        long long n;
        si>>n;
        int i,c,d=1,s=1,mod=9973;
        long long p;
        for(i=0;prime[i]*prime[i]<=n&&i<nrp;++i)
        {
            if(n%prime[i]==0)
            {
                c=0;
                p=prime[i];
                while(n%prime[i]==0)
                {
                    ++c;
                    p=p*prime[i];
                    n=n/prime[i];
                }
                d=(d*(c+1))%mod;
                s=(s*(p-1LL)/(prime[i]-1LL))%mod;
            }
        }
        if(n!=1)
        {
            d=(d*2)%mod;
            s=(s*(n+1))%mod;
        }
        so<<d<<' '<<s<<'\n';
    }
}