Cod sursa(job #861687)

Utilizator lehman97Dimulescu David lehman97 Data 21 ianuarie 2013 20:49:09
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <stdio.h>
#include <math.h>


using namespace std;

FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");

const int n=1000000;
int i,a,nr,p,prim[n],cnt=0;




void ciur()
{
    int i,j;

    for (i=2;i<=n;i++)
    prim[i]=1;

    for (i=2;i<=n;i++)
        if (prim[i])
        {
            cnt++;
            for (j = 2*i;j<=n;j+=i)
                prim[j] = 0;
        }
}







void desc(int nr)
{

    int x,i=0,d,sum=1,dv=1;
    int cnr=nr;

    for(i=2;i<=n;i++)
    if(prim[i])
    {
        if(i>sqrt(cnr))break;
        d=1;
        while(nr%i==0){d++;nr/=i;}
        dv=(d*dv)%9973;
        if(d>1)
        {
            x=i;
            x=pow(x,d);
            x--;
            x/=(i-1);
            sum=(sum*x)%9973;
        }


    }
    if(nr>1){dv=(dv+1)%9973;sum=(sum+nr)%9973;};


    fprintf(g,"%d ",dv);
    fprintf(g,"%d\n",sum);



}



int main()
{
    ciur();
    fscanf(f,"%d",&a);
    for(i=1;i<=a;i++)
    {
        fscanf(f,"%d",&nr);
        desc(nr);
    }


    fclose(g);
    return 0;
}