Cod sursa(job #2019947)

Utilizator workwork work work Data 8 septembrie 2017 22:15:40
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define MOD 9973
using namespace std;
ifstream F("ssnd.in");
ofstream G("ssnd.out");
int t, p[1000005], k, c[1000005];
long long put(long long x,int p)
{
    long long rez=1;
    for(int i=1;i<=p;i++)
        rez*=x;
    return rez;
}
void div(long long x)
{
    if(x==1)
    {
        G<<1<<" "<<1<<"\n";
        return ;
    }
    int i=1;
    long long 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*(put(p[i],e+1)-1)/(p[i]-1))%MOD;
        }
        i++;
    }
    if(x>1)
        nrd*=2,s=(s*(put(x,2)-1)/(x-1))%MOD;
    G<<nrd<<" "<<s<<"\n";
}
int main()
{
    ios_base::sync_with_stdio(0);F.tie(0);
    for(int i=2;i<=1000000;i++)
        if(!c[i])
        {
            p[++k]=i;
            for(int j=i+i;j<=1000000;j+=i)
                c[j]=1;
        }
    F>>t;
    for(int i=1;i<=t;i++)
    {
        long long x;
        F>>x;
        div(x);
    }
    return 0;
}