Cod sursa(job #1021774)

Utilizator leontinLeontin leontin Data 4 noiembrie 2013 10:57:28
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include<fstream>
#include<math.h>
using namespace std;

    ifstream f("ssnd.in");
    ofstream g("ssnd.out");

void fun(long long a,long long &nr,long long &s)

{

nr=s=1;
long long baza[1000],exp[1000],i=2,c=0;
for(i=1;i<=998;i++)
    exp[i]=0;
i=2;
while(a!=1)
{
    if(a%i==0)
    {
        c++;
        baza[c]=i;
        while(a%i==0)
        {
            exp[c]++;
            a=a/i;
        }
    }
    i++;
}



long long p=1;
for(i=1;i<=c;i++)
{
    nr=nr*(exp[i]+1);
    p=pow(baza[i],(exp[i]+1));
    s=s*(p-1)/(baza[i]-1);}


}


int main()
{
    long long n,i,nr,s,num[1000001],x,c;


    for(i=1;i<=999999;i++)
        num[i]=0;
    for(i=2;i<=999999;i++)
    {
        if(num[i]==0)
        {
            c=i+i;
            while(c<=999999)
            {
                num[c]=1;
                c=c+i;
            }
        }
    }
for(i=1;i<=n;i++)
{
    f>>x;

    if(num[x]==0&&x<1000000)
        g<<2<<" "<<(x+1)%9973<<endl;
    else

    {
        fun(x,nr,s);
        g<<nr<<" "<<s%9973<<endl;
    }
    f.close();
    g.close();
    return 0;
}
}