Cod sursa(job #1140989)

Utilizator span7aRazvan span7a Data 12 martie 2014 14:16:31
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
#include<cmath>
#include<vector>
#define MOD 9973
#define maxim 1000005
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool viz[maxim];
vector<int>v;
int k,n,i,e1,e2,nrdiv,sumdiv,nrprime,fa;
void ciur()
{
    nrprime=0;
    int i,j;
    for(i=2;i<=maxim;i++)
        if(viz[i]==0)
            {v.push_back(i);
            for(j=i+i;j<=maxim;j+=i)
                viz[j]=1;
            }

}
void calculeaza(int nr)
{
    nrdiv=1;sumdiv=1;
    i=0;
    while(i<v.size()&&1LL*v[i]*v[i]<=nr)
      {

        if(nr%v[i]==0)
        {
            fa=1;e1=0;
            while(nr%v[i]==0)
            {
                nr/=v[i];
                fa=(fa*v[i])%MOD;
                e1++;
            }
            nrdiv*=(e1+1);fa*=v[i];
            sumdiv*=((fa-1)/(v[i]-1))%MOD;
        }
        i++;
      }
    if(nr>1){nrdiv*=2;sumdiv*=(nr+1);}
   g<<nrdiv<<" "<<sumdiv%MOD<<'\n';
}
int main()
{
    int a,i;
    ciur();
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a;
        calculeaza(a);
    }
    g<<'\n';

    return 0;
}