Cod sursa(job #1624516)

Utilizator trutruvasilicaHuhurez Marius trutruvasilica Data 2 martie 2016 11:41:44
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int N=1000000;
bitset <N> v;
int p[79500];
const int mod=9973;
inline int putere(int a,int p)
{
   int result=1;
    while(p)
    {
        if(p&1) result=(1LL*result*a)%mod;
        a=(1LL*a*a)%mod;
        p>>=1;
    }
    return result;
}
inline void ciur()
{
    int i,j;
    p[++p[0]]=2;
    for(i=3;i*i<=N;i+=2)
    {   if(!v[i])
        for(j=i*i;j<=N;j+=i) v[j]=1;
    }
    for(i=3;i<N;i+=2) if(!v[i]) p[++p[0]]=i;
}
int main()
{  
   int t,i,j,q,nr,a,b;
   int sum;
   long long n;
    ciur();
    fin>>t;
    for(i=0;i<t;i++)
    {
        sum=1;
        nr=1;
        fin>>n;
        for(j=1;1LL*p[j]*p[j]<=n&&j<=p[0];j++)
        {   q=0;
            while(n%p[j]==0) {q++;n/=p[j];}
            if(q>0)
            {
            nr*=(q+1);
            a=(putere(p[j],q+1)-1)%mod;
            b=putere(p[j]-1,mod-2)%mod;
            sum=(((sum * a) % mod) * b) % mod;
            }
        }
        if(n>1) { nr *= 2;
        sum = (1LL*sum*(n+1) % mod);}
        fout<<nr<<" "<<sum<<"\n";
    }
}