Cod sursa(job #1970133)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 18 aprilie 2017 22:03:35
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <bitset>
using namespace std;

#define dim 1000003
#define mod 9973
bitset<dim> v;
int q[78500];

int main()
{
    long long i, j, t, n, nr, s,aux;
    long long unsigned p, div;
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");

    fin>>t;
    int f=0;
    q[0]=2;
    for(i=2;i<=1000000;++i)
    {
        ++i;
        if(v[i]==0)
        {
            q[++f]=i;
            for(j=i;j<=1000000/i;++j)
            {
                    v[i*j]=1;
                    ++j;
            }
        }
    }
    for(;t;--t)
    {
        fin>>n;
        s=div=1;
        aux=n;

        int j=0;
        while(n>1)
        {

            if(n%q[j]==0)
            {
                nr=0;p=1;
                while(n%q[j]==0)
                {
                    ++nr;
                    p*=q[j];
                    n/=q[j];
                }
                p*=q[j];
                div*=(nr+1);
                s*=((p-1)/(q[j]-1));
                s%=mod;
            }
            if(q[j]*q[j]>n && n>1)
            {
                long long fufu=n*n-1;
                div*=2;
                s*=(fufu)/(n-1);
                s%=mod;
                n=1;
            }
            ++j;
        }
        fout<<div <<" " <<s <<'\n';

    }

    return 0;
}