Cod sursa(job #1585783)

Utilizator gorni97aaa aaa gorni97 Data 31 ianuarie 2016 14:38:53
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <stdlib.h>
#include <string>
#include <bitset>
#define MAX_N 1000005
using namespace std;
long long n;
int a[MAX_N];
bool v[1000005];



void ciur()
{int i,j;
    for(i=1;i<MAX_N;i++)
v[i]=0;

v[2]=0;i=2;
while(i<=MAX_N)
{if(v[i]==0)
{j=1;
while((i*(j+1))<=MAX_N)
{j++;
v[j*i]=1;
}
}
i++;}
}

int pow(int x,int y)
{int n;
if(y==0) return 1;
n=1;
while(y>0)
{
if(y%2==0)
{x=x*x;
y=y/2;}
else
{n=n*x;
y--;}
}
return n;

}

int main()

{ int t,i,sum,nr,max,x,y,m;


fstream f("ssnd.in",ios::in);
fstream g("ssnd.out",ios::out);
f>>t;
ciur();
max=0;
for(x=1;x<=t;x++)

{f>>n;
if(v[n]==0)
    g<<2%9973<<" "<<(n+1)%9973<<'\n';
else
{m=n;
    for(i=2;i<=sqrt(n);i++)
    a[i]=0;
    y=sqrt(n);
    for(i=2;((i<=y)&&(n!=1));i++)
    {if((i>max)&&((n%i)==0)) max=i;

       while((n%i==0)&&(n!=1))
    {a[i]=a[i]+1;
    n=n/i;
    }
    }
    nr=1;sum=1;
    for(i=2;i<=max;i++)
       {
           nr=nr*(a[i]+1);
       if(m%i==0)
        sum=sum*((pow(i,a[i]+1)-1)/(i-1));
       }
g<<nr%9973<<" "<<sum%9973<<'\n';
}

}




    f.close();
    g.close();

}