Cod sursa(job #631588)

Utilizator johnyJohny Deep johny Data 8 noiembrie 2011 20:07:33
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<iostream>
#include<fstream>
#include<cmath>
#define max 1000000
using namespace std;
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
int a[max+1],p[100000];
void ciur()
{
    int i,j;
    a[1]=1;
    for (i=2; i<=1000; i++)
      if (a[i]==0)
            for (j=2; j<=max/i; j++)
                a[i*j]=1;
    p[0]=0;
    for (i=2; i<=max; i++)
        if (a[i]==0)
        {
            p[0]+=1;
            p[p[0]]=i;
        }
}

void nr_sum_div(int n)
{
    int i=1,e,nr=1,s=1;
    while (p[i]<=sqrt(n))
     if (n%p[i]==0)
     {
         e=0;
         while (n%p[i]==0)
        {
           e++;
           n=n/p[i];
           s*=p[i];
        }
        nr*=(e+1);
        s=(s*p[i]-1)/(p[i]-1);
        i++;
     }
    else i++;
    if(n>1)
    {
        nr*=2;
        s*=(n+1);
    }
      g<<nr<<' '<<s<<'\n';
}
int main()
{
    int i,t,n;
    ciur();
    f>>t;
    for (i=1;i<=t;i++)
    {
        f>>n;
        nr_sum_div(n);
    }
    f.close();
    g.close();
}