Cod sursa(job #1607737)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 21 februarie 2016 16:04:01
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define SIZE 1000003

int fr[SIZE];
int v[75000];


int main()
{
    int t,s,con,c,d,x,conj,srt,cd,l,m,n,ga;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d ",&t);
    fr[2]=0;
    int sqrtSize=sqrt(SIZE);
    for(int i=2; i<=sqrtSize; i++)
    {
        if(fr[i]==0)
        {
            con=2;
            d=i;
            s=d*con;
            while(s<=SIZE)
            {
                fr[s]=1;
                s=d*con;
                con++;
            }
        }
    }
    c=0;
    int u=0;
    for(int i=2; i<=1000000; i++)
    {
        if(fr[i]==0)
        {
            c++;
            u++;
            v[u]=i;
        }
    }
    for(int i=1;i<=t;i++)
    {
        scanf("%d ",&x);
        conj=1;
        double b=x;
        srt=sqrt(b);
        s=1;
        ga=0;
        cd=1;
        while(v[conj]<=srt)
        {
            con=0;
            if(x%v[conj]==0)
            {
                ga=1;
                while(x%v[conj]==0)
                {
                    con++;
                    x=x/v[conj];
                }
            }
            cd=cd*(con+1);
            double j=v[conj];
            double k=con+1;
            n=pow(j,k)-1;
            m=v[conj]-1;
            l=n/m;
            s=s*l;
            conj++;
        }
        if(ga==0)
        {
            s=x+1;
            cd=2;
            printf("%d %d",cd,s);
            printf("\n");
        }
        else
        {
            printf("%d %d\n",cd,s);
        }
    }
    return 0;
}