Cod sursa(job #1608375)

Utilizator AeroHHorea Stefan AeroH Data 22 februarie 2016 00:31:58
Problema Suma si numarul divizorilor Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
#define N 1000000
#define mod 9973
using namespace std;
string s = "ssnd.";
ifstream f(s+"in");
ofstream g(s+"out");

bool ch[N+2];
int pr[175000],nrp;

int main()
{
    int t,ct,nrd,i,j;
    long long int x,sumd,ex;

    for(i=2;i<=N;++i)
        if (ch[i]==0)
            {
                for (j=i+i;j<=N;j+=i)
                    ch[j]=1;
                pr[nrp++]=i;
            }

    f>>t;
    while(t--)
    {
        f>>x;
        nrd=sumd=1;
        for (i=0;1ll*pr[i]*pr[i]<=x;++i)
        if(x%pr[i]==0)
        {
            ct=1;
            ex=pr[i];
            while(x%pr[i]==0)
            {
                ++ct;
                x/=pr[i];
                ex*=pr[i];
            }
            nrd=nrd*ct;
            sumd*=(ex-1)/(pr[i]-1)%mod;
        }
        if (x!=1)
        {
            nrd=nrd*2;
            sumd=sumd*(x+1)%mod;
        }
        g<<nrd<<" "<<sumd<<'\n';
    }

    return 0;
}