Cod sursa(job #2006753)

Utilizator cipri321Marin Ciprian cipri321 Data 31 iulie 2017 15:48:40
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <cstring>
#define MOD 9973
using namespace std;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");
bool E[1000001];
int P[100001],p;
int T;
long long n;
long long putere(long long x,int p)
{
    long long rez=1;
    for(int i=1;i<=p;i++)
        rez*=x;
    return rez;
}
void f(long long x)
{
    if(x==1)
    {
        fo<<1<<" "<<1<<"\n";
        return ;
    }
    int i=1,nrd=1,s=1;
    while(1LL*P[i]*P[i]<=x)
    {
        int e=0;
        while(x%P[i]==0)
            x/=P[i],e++;
        if(e>0)
        {
            nrd*=(e+1);
            s=(s*(putere(P[i],e+1)%MOD-1)/(P[i]-1))%MOD;
        }
        i++;
    }
    if(x>1)
        nrd*=2,s=(s*(putere(x,2)%MOD-1)/(x-1))%MOD;
    fo<<nrd<<" "<<s<<"\n";
}
int main()
{
    for(int i=2;i<=1000000;i++)
        E[i]=true;
    for(int i=2;i<=1000000;i++)
        if(E[i])
        {
            P[++p]=i;
            for(int j=i+i;j<=1000000;j+=i)
                E[j]=false;
        }
    fi>>T;
    for(int t=1;t<=T;t++)
    {
        fi>>n;
        f(n);
    }
    fi.close();
    fo.close();
    return 0;
}