Cod sursa(job #1245087)

Utilizator danstefanDamian Dan Stefan danstefan Data 18 octombrie 2014 17:04:59
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
#include<cstdio>
using namespace std;
long long n,p1,p2,i,a,fa,e,p,j,M;
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 {
            p1=1;
       p2=1;
       p=1;
            fa=2;
       while(a>1&&fa*fa<=a){
            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);}
                fa++;}
       g<<p<<" "<<p1<<'\n';}}
    return 0;}