Cod sursa(job #1970132)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 18 aprilie 2017 22:02:45
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<bits/stdc++.h>
#define MOD 9973
#define MaxN 100005
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
vector <int> Primes;
bitset<MaxN> isPrime;

inline void computePrimes()
{
    Primes.push_back(2);
    for(int i=3; i<=1000; i=i+2)
        if(isPrime[i]==0)
            for(int j=i*i; j<=MaxN; j=j+i)
                isPrime[j]=1;
    for(int i=3; i<=MaxN; i=i+2)
        if(isPrime[i]==0)
           Primes.push_back(i);
}

inline void Query(long long N)
{
    int t,nr,e,sum;
    sum=nr=1;
    for(auto it:Primes)
        if(N%it==0)
        {
            e=1,t=it;
            while(N%it==0) t*=it,N/=it,++e;
            nr*=e,sum*=((t-1)/(it-1))%MOD;
        }
    if(N!=1)
        nr*=2,sum*=(N*N-1)/(N-1)%MOD;
    g<<nr<<' '<<sum%MOD<<'\n';
}

inline void solve()
{
    long long T,N;
    f>>T;
    while(T--)
    {
        f>>N;
        Query(N);
    }
}

int main()
{
    computePrimes();
    solve();
}