Cod sursa(job #1014276)

Utilizator tavi.belu1994FMI Belu Andrei Octavian tavi.belu1994 Data 22 octombrie 2013 13:28:09
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <cstdio>
#include <cmath>
FILE *f,*g;

using namespace std;

int main(){
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
int t;
long n,i,nr=0,x,j,pp,xx;
char A[1000001];
fscanf(f,"%d",&t);

for(i=1;i<=1000000;i++)
{
    A[i]=0;
}
int k,p=2;
while(p<=1000000)
{
    if(A[p]==0)
    {
        nr++;
        k=p+p;
        while(k<=1000000)
        {
            A[k]=1;
            k=k+p;
        }
    }
    p++;
}

for(i=1;i<=t;i++)
{
    fscanf(f,"%d",&x);
    int sum;
    xx=x;
    long nr;
    pp=x/2;
    sum=1;
    nr=1;
    int kk=0;
    int div[1000][2];
    for(j=2;j<=pp;j++)
    {
        if(A[j]==0)
        {
            if(x%j==0)
            {
                kk++;
                div[kk][1]=0;
                div[kk][0]=j;

                while((x!=1)&&(x%j==0))
                {
                    div[kk][1]++;
                    x=x/j;
                }
            }
        }
    }
    for(j=1;j<=kk;j++)
    {
        nr=nr*(div[j][1]+1);
        long pt;
        pt=pow(div[j][0],div[j][1]+1);
        sum=sum*((pt-1)/(div[j][0]-1));
    }
    if(nr==1&&sum==1)
    {
        nr++;
        sum=sum+xx;
    }
    fprintf(g,"%d %d\n",nr,sum);
}

return 0;
}