Pagini recente » Cod sursa (job #1922614) | Istoria paginii runda/bolt | Cod sursa (job #2054539) | Cod sursa (job #1687428) | Cod sursa (job #968618)
Cod sursa(job #968618)
#include <fstream>
#include <string.h>
#include <math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int prime_nb[1000002],length_prime,last_div,T;
long long N;
bool is_prime[1000002];
void Eratostenes()
{
int i,j;
for(i=2;i<=1000000;i++)
{
if(is_prime[i]==0)
{
prime_nb[++length_prime]=i;
for(j=i+i;j<=1000000;j+=i)
is_prime[j]=1;
}
}
}
int power_log(int n,int p)
{
int sol=1;
while(p)
{
if(p%2==1)
sol=(sol*n)%9973;
n=(n*n)%9973;p=p/2;
}
return sol;
}
int invers_mod(int A)
{
return power_log(A,9971);
}
void sum_and_nb_div(long long x)
{
int i=1,nb_div=1,sum=1,exponent=0;
while(x!=1)
{
exponent=0;
while(x%prime_nb[i]==0)
{
x/=prime_nb[i];
exponent++;
}
nb_div*=(exponent+1);
sum*=((long long)(power_log(prime_nb[i],exponent+1)-1)*(long long)invers_mod(prime_nb[i]-1))%9973;
sum%=9973;
i++;
if(prime_nb[i]>(int)sqrt((double)x))
break;
}
if(x!=1)
{
sum*=((long long)(power_log(x,2)-1)*(long long)invers_mod(x-1))%9973;
sum%=9973;
nb_div*=2;
}
g<<nb_div<<" "<<sum<<"\n";
}
/*void Sum_of_div()
{
int i,limit=(int)sqrt((double)N),result=1;
for(i=1;i<=limit;i++)
if(exponent!=0)
{
result*=((long long)(power_log(prime_nb[i],exponent+1)-1)*(long long)invers_mod(prime_nb[i]-1))%9973;
result%=9973;
}
if(last_div!=0)
{
result*=((long long)(power_log(last_div,2)-1)*(long long)invers_mod(last_div-1))%9973;
result%=9973;
}
g<<result<<"\n";
}*/
void Read_and_Process()
{
f>>T;
int i;
for(i=1;i<=T;i++)
{
last_div=0;
f>>N;
sum_and_nb_div(N);
}
}
int main()
{
Eratostenes();
Read_and_Process();
return 0;
}