Cod sursa(job #876916)

Utilizator Eby7Elena Obreja Eby7 Data 12 februarie 2013 12:26:22
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
#include<math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
struct chestie
{
    int f,exp;
};
chestie power[100];
int n,i,p,pr,e,ok[1000001],a[1000001],nr;
long long x,l,sum,j;
void ciur()
{
    i=3;
    while(i<=1000)
    {
        if(!ok[i])
         for(j=(long long)i*i;j<=1000000;j+=i)
          ok[j]=1;
        i+=2;
    }
    a[++nr]=2;
    for(i=3;i<=1000000;i+=2)
     if(!ok[i])
      a[++nr]=i;
}
int main()
{
    ciur();
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>x;
        p=0;
        for(j=1;(long long)a[j]*a[j]<=x;j++)
         if(x%a[j]==0)
         {
             e=0;
             while(x%a[j]==0)
             {
                 x/=a[j];
                 e++;
             }
             p++;
             power[p].f=a[j];
             power[p].exp=e;
             if(x==1)
              break;
         }
        if(x!=1)
        {
            p++;
            power[p].f=x;
            power[p].exp=1;
        }
        pr=1;
        sum=1;
        for(j=1;j<=p;j++)
        {
            pr=pr*(power[j].exp+1);
            l=1;
            for(e=1;e<=power[j].exp+1;e++)
             l=(long long)l*power[j].f;
            sum=((long long)sum*(l-1)/(power[j].f-1))%9973;
        }
        g<<pr<<" "<<sum;
        g<<"\n";
    }
    return 0;
}