Cod sursa(job #1245108)

Utilizator danstefanDamian Dan Stefan danstefan Data 18 octombrie 2014 17:17:46
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include<fstream>
#include<cstdio>
using namespace std;
long long n,p1,p2,i,a,fa,e,p,j,M,ca,su=1;
bool v[1000010];
int main()
{
    freopen("ssnd.in","r",stdin);
    ofstream g ("ssnd.out");
    scanf("%lld",&n);
    p=1;
    p2=1;
    M=1000000;
    for(i=2; i<=M; i++)
        v[i]=true;
    for(i=2; i<=M; i++)
        if(v[i])
        {
            j=i*2;
            while(j<=M)
            {
                v[j]=false;
                j+=i;
            }
        }
    for(i=1; i<=n; i++)
    {
        scanf("%lld",&a);
        if(v[a])g<<2<<" "<<a+1<<'\n';
        else
        {
            su=1;
            p=1;
            fa=2;
            ca=a;
            while(a>1&&fa*fa<=ca)
            {
                 p1=1;
            p2=1;
                e=0;
                while(a%fa==0)
                {
                    a/=fa;
                    e++;
                }
                if(e)
                {
                    p=p*(e+1);
                    for(j=1; j<=e+1; j++)
                        p2=p2*fa;
                    p2--;
                    p1=p2/(fa-1);
                    su=su*p1;
                }
                fa++;
                if(fa*fa>ca&&a>1){
                    p=p*2;
                    for(j=1; j<=2; j++)
                        p2=p2*a;
                    p2--;
                    p1=p2/(a-1);
                    su=su*p1;
                }
            }
            g<<p<<" "<<su<<'\n';
        }
    }
    return 0;
}