Pagini recente » Cod sursa (job #2388207) | Cod sursa (job #1886119) | Cod sursa (job #3271867) | Cod sursa (job #2710698) | Cod sursa (job #1527534)
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
void prime(long int v[1000006] , long int n)
{
int i;
v[1] = 0;
for ( i = 2 ; i <= n/2 ; i++ )
v[i] = i;
int j;
for ( i = 2 ; i <= n/2 ; i++ )
{
if (v[i] == i)
{
for( j = i + i ; j <= n/2 ; j = j + i )
v[j] = 0;
}
}
}
int impartire(long int n, long int i)
{
int S = 0;
while(n % i == 0)
{
S = S + 1;
n = n / i;
}
return S;
}
void vectordiv(long int n, long int v[1000006])
{
prime(v,n);
for(int i = 2 ; i <= n/2 ; i++)
{
if(v[i] != 0)
v[i] = impartire(n,v[i]) + 1;
}
}
int serie(long int i, long int v)
{
int S = 1;
while(v != 1)
{
S = S + pow(i,(v-1));
v--;
}
return (S % 9973);
}
int suma(long int n)
{
long int S = 1;
long int v[1000006];
vectordiv(n,v);
for(int i = 2 ; i <= n/2 ; i++)
if(v[i] != 0)
S = S * serie(i,v[i]);
if(S == 1)
S = n + 1;
return S;
}
int div(long int n)
{
long int v[1000006];
vectordiv(n,v);
long int nrdiv = 1;
for(int i = 2 ; i <= n/2 ; i++)
if(v[i] != 0)
nrdiv = nrdiv * v[i];
if (nrdiv == 1)
return 2;
else
return nrdiv;
}
long int v[1000006];
int main()
{
long int n;
f>>n;
int i;
int x;
for( i = 1 ; i <= n ; i++)
{f>>x;
g<<div(x)<<" "<<suma(x)<<endl;
}
return 0;
}