Cod sursa(job #929491)

Utilizator AeroHHorea Stefan AeroH Data 27 martie 2013 01:19:28
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
FILE*fin=fopen("ssnd.in","r");
FILE*fout=fopen("ssnd.out","w");
int i,j,k,m,l,n,a,rasp,val[1000005],sum,prim[1000005],p;
//vector <int> v;
char v[200000];
int main()
{


    for (i=1;(i<<1)+1<100000;i++)
    if (v[i]==0)
    for(j=(i<<2)-i+1;(j<<1)+1<100000;j+=(i<<1)+1)
    v[j]=1;
    for (i=1;(i<<1)+1<100000;i++)
    if (v[i]==0)
    prim[++k]=(i<<1)+1;
    prim[0]=2;
    fscanf(fin,"%d",&n);
    k=0;
    for(i=1;i<=n;i++)
    {
        fscanf(fin,"%d",&a);
        for (j=0;j<=k;j++)
        val[j]=0;
        k=0;
        l=0;
        sum=1;
        rasp=1;
        while(a!=1)
        {
            if (a%prim[k]==0)
            {

            while (a%prim[k]==0)
            {

                a/=prim[k];
                ++val[k];
            }
            ++l;
            }
            else ++k;
        }
        for (j=0;j<=k;j++)
        if (val[j]>0)
        {
        rasp*=(val[j]+1);
        p=1;
        while (val[j]>=0)
        {
            p*=prim[j];
            --val[j];
        }
        p--;
        sum*=(p/=(prim[j]-1));
        }
        fprintf(fout,"%d %d\n",rasp,sum);

    }
    return 0;
}