Cod sursa(job #1377755)

Utilizator danysilas23Silas Daniel danysilas23 Data 6 martie 2015 00:58:25
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#define ll long long
#define mod 9973
#define Nmx 1000000
using namespace std;
unsigned ll n,j,i,sum,prod,x,cx,t;
bool ok[1000005];
ll prime[100005];
int max(int a,int b)
{
    if (a>b) return a;
    return b;
}
ll pow(ll a,int x)
{
    ll p=1,i;
    for (i=1;i<=x;i++) p*=a;
    return p;
}
ll calcul(ll a,int x)
{
    return ((pow(a,x)-1)/(a-1));
}
int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");
    cin>>n;
    for (i=2;i<=Nmx;i++)
       if (!ok[i])
         {
             prime[++prime[0]]=i;
             for (j=2*i;j<=Nmx;j+=i) ok[j]=true;
         }
    for (i=1;i<=n;i++)
    {
        cin>>x;
        prod=1;sum=1;cx=x;j=1;
        while (cx>0 && cx>=prime[j]*prime[j])
        {
            t=0;
            while (cx%prime[j]==0)
            cx/=prime[j],t++;
            if (t>0) sum=((sum%mod)*calcul(prime[j],t+1))%mod,prod=prod*(t+1);
            j++;
        }
        if (cx>1)
        prod*=2,sum=((sum%mod)*((cx*cx-1)/(cx-1)))%mod;
        cout<<prod<<" "<<sum<<endl;
    }
    return 0;
}