Pagini recente » Cod sursa (job #359314) | Cod sursa (job #2747766) | Cod sursa (job #1235770) | Cod sursa (job #951749) | Cod sursa (job #862468)
Cod sursa(job #862468)
#include <stdio.h>
#include <math.h>
#include <bitset>
using namespace std;
FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");
bitset <1000010> v;
int t,nr,p,m,b[80001],nr1;
long long div,div2,s,x,l,maxi,a[1001],maxim,i,j;
void ciur()
{
v[2]=0;
nr1=1;
b[nr1]=2;
for(i=3;i<=maxim;i+=2)
if (v[i]==0)
{
nr1++;
b[nr1]=i;
for(j=3;i*j<=maxim;j+=2)
v[i*j]=1;
}
}
int main()
{
fscanf(f,"%d",&t);
for(i=1;i<=t;i++){
fscanf(f,"%lld",&a[i]);
if (a[i]>maxi)maxi=a[i];
}
maxim=trunc(sqrt(maxi));
ciur();
for(i=1;i<=t;i++)
{
x=a[i];
nr=1;
s=1;
m=trunc(sqrt(x));
l=x;
j=1;
while(b[j]<=m && j<=nr1)
{
if (x%b[j]==0)
{
p=0;
div=1;
while(l%b[j]==0){
p++;l=l/b[j];
div=div*b[j];
}
div=div*b[j]-1;
s=(s*(div/(b[j]-1)))%9973;
nr=nr*(p+1);
}
j++;
}
if (l!=1){nr=nr*2;s=(s*(l*l-1)/(l-1))%9973;}
fprintf(g,"%d %d\n",nr,s);
}
fclose(g);
return 0;
}