Cod sursa(job #2417077)

Utilizator Carol_LucaCarol Luca Carol_Luca Data 28 aprilie 2019 20:45:57
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
/// ssnd

#include <fstream>
#include <vector>
#define infile "ssnd.in"
#define outfile "ssnd.out"
#define mod 9973
using namespace std;
const int lim=1e6;
bool v[lim+3];
vector<int> p;
int tst,nr,exp;
long long int n,sum;
void ciur()
{
    p.push_back(2);
    for(int i=3;i<=lim;i+=2)
    if(v[i]==0)
    {
        p.push_back(i);
        for(int j=2;j<=lim/i;++j)
            v[i*j]=1;
    }
}
long long int power(long long int a,int exp)
{
    long long int p=1;
    for(int i=0;i<exp;++i)
        p*=a;
    return p;
}
int main()
{
    ifstream in(infile);
    ofstream out(outfile);
    ios_base::sync_with_stdio(false);
    in.tie(0),out.tie(0);
    ciur();
    in>>tst;
    for(int e=0;e<tst;++e)
    {
        in>>n;
        nr=1;
        sum=1;
        for(int i=0;i<p.size() and p[i]*p[i]<=n and n>1;++i)
        if(n%p[i]==0)
        {
            exp=0;
            while(n%p[i]==0)
                ++exp,n/=p[i];
            nr*=(exp+1);
            sum*=((power(p[i],exp+1)-1)/(p[i]-1))%mod;
            sum%=mod;
        }
        if(n!=1)
            nr*=2,sum*=(n+1)%mod,sum%=mod;
        out<<nr<<" "<<sum<<endl;
    }
    return 0;
}