Pagini recente » Cod sursa (job #2203526) | Cod sursa (job #510888) | Cod sursa (job #2207477) | Cod sursa (job #3232280) | Cod sursa (job #956131)
Cod sursa(job #956131)
#include<fstream>
#define NMAX 1000007
#include<math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
struct factori{int factor;
int p;};
factori div[100];
int t,N,l=1;
bool v[NMAX];
void ciur()
{int i,j;
for(i=2;i<=NMAX;i++)
v[i]=1;
for(i=2;i<=NMAX;i++)
if(v[i])
for(j=i+i;j<=NMAX;j=j+i)
v[j]=0;
}//ciuruim numerele pana la 10^6
void curatare()
{int i;
for(i=1;i<=l;i++)
{div[i].factor=0;
div[i].p=0;}
l=1;
}
int suma()
{int i,s=1;
for(i=1;i<=l;i++)
s=s*(div[i].p+1);
return s;
}
int putere(int a,int b)
{int i,p=1;for(i=1;i<=b;i++)
p=p*a;
return p;
}
int produs()
{int i,p=1;
for(i=1;i<=l;i++)
p=p*(putere(div[i].factor,div[i].p+1)-1)/(div[i].factor-1);
return p;
}
void incarcare()
{int i,ok=0,m;
for(i=2;i<=NMAX;i++)
if(v[i]==1)//daca e un factor prim
{if(N%i==0)//daca e divizor
{div[l].factor=i;//incarcam ca fiind factor
m=N;
while(m%i==0)//calculam puterea
{m=m/i;div[l].p++;}
l++;}
ok=1;
}
if(ok==0){div[1].factor=N;div[1].p=1; }
}
int main()
{int i;
f>>t;ciur();
for(i=1;i<=t;i++)
{f>>N;
incarcare();
g<<suma()<<" ";
g<<produs()<<"\n";
curatare();
}
return 0;
}