Pagini recente » Cod sursa (job #1233208) | Cod sursa (job #2971745) | Cod sursa (job #2872466) | Cod sursa (job #1871312) | Cod sursa (job #1693941)
#include <fstream>
#include<bitset>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset<1000005>a;
int n,k,prime[90000],suma,nrdivizori,y;
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(int x,int p)
{
int s=1;
while(p>0)
{
if(p%2==1)
{
s=s*x;
p--;
}
x=x*x;
p=p/2;
}
return s;
}
void Rezolvare(int z)
{
int s,d,i=1;
suma=nrdivizori=1;
d=2;
while(z>1 and d*d<=z)
{
s=0;
while(z%d==0)
{
z/=d;
s++;
}
if(s!=0)
{
nrdivizori*=(s+1);
suma=(1LL*suma*((Ridicare(d,s+1)-1)/(d-1)))%9973;
}
i++;
d=prime[i];
}
if(z>1)
{
nrdivizori*=2;
suma=(1LL*suma*((Ridicare(z,2)-1)/(z-1)))%9973;
}
}
int main()
{
int i;
fin>>n;
Ciur();
for(i=1;i<=n;i++)
{
fin>>y;
Rezolvare(y);
fout<<nrdivizori<<" "<<suma<<"\n";
}
}