Pagini recente » Cod sursa (job #2071263) | Cod sursa (job #2741794) | Cod sursa (job #1699030) | Cod sursa (job #732614) | Cod sursa (job #968611)
Cod sursa(job #968611)
#include <fstream>
#include <string.h>
#include <math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int exponent[1000002],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;
}
}
}
void prime_facts_and_nb_div(long long x)
{
int i=1,nb_div=1;
while(x!=1)
{
while(x%prime_nb[i]==0)
{
x/=prime_nb[i];
exponent[i]++;
}
nb_div*=(exponent[i]+1);
i++;
if(prime_nb[i]>(int)sqrt((double)x))
break;
}
if(x!=1)
{
last_div=x;
nb_div*=2;
}
g<<nb_div<<" ";
}
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_of_div()
{
int i,limit=(int)sqrt((double)N),result=1;
for(i=1;i<=limit;i++)
if(exponent[i]!=0)
result*=((power_log(prime_nb[i],exponent[i]+1)-1)*invers_mod(prime_nb[i]-1))%9973;
if(last_div!=0)
result*=((power_log(last_div,2)-1)*invers_mod(last_div-1))%9973;
g<<result<<"\n";
}
void Read_and_Process()
{
f>>T;
int i;
for(i=1;i<=T;i++)
{
last_div=0;
memset(exponent,0,sizeof(exponent));
f>>N;
prime_facts_and_nb_div(N);
Sum_of_div();
}
}
int main()
{
Eratostenes();
Read_and_Process();
return 0;
}