Pagini recente » Cod sursa (job #2731506) | Cod sursa (job #2370065) | Cod sursa (job #2226697) | Cod sursa (job #3153736) | Cod sursa (job #1693954)
#include <fstream>
#include<bitset>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset<1000005>a;
int k,prime[90000];
unsigned long long suma,nrdivizori,y,n;
void Ciur()
{
int i,j;
a[1]=1;
k=0;
for(i=4;i<=1000005;i=i+2)a[i]=1;
for(i=3;i*i<=1000005;i=i+2)
if(a[i]==0)
for(j=i*i;j<=1000005;j=j+2*i)a[j]=1;
prime[1]=2;
k=1;
for(i=3;i<=1000005;i=i+2)
if(a[i]==0)
prime[++k]=i;
}
int Ridicare(unsigned long long x,unsigned long long p)
{
unsigned long long s=1;
while(p>0)
{
if(p%2==1)
{
s=1LL*s*x;
p--;
}
x=1LL*x*x;
p=p/2;
}
return s;
}
void Rezolvare(unsigned long long z)
{
unsigned long long s,d,i=1;
suma=nrdivizori=1;
d=2;
while(z>1 and d*d<=z and i<=k)
{
s=0;
while(z%d==0)
{
z/=d;
s++;
}
if(s!=0)
{
nrdivizori*=(s+1);
suma=(1LL*(suma/(d-1))*(Ridicare(d,s+1)-1))%9973;
}
i++;
d=prime[i];
}
if(z>1)
{
nrdivizori*=2;
suma=(1LL*(suma/z-1)*(Ridicare(z,2)-1))%9973;
}
}
int main()
{
int i;
fin>>n;
Ciur();
for(i=1;i<=n;i++)
{
fin>>y;
Rezolvare(y);
fout<<nrdivizori<<" "<<suma<<"\n";
}
}