Pagini recente » Cod sursa (job #2347932) | Cod sursa (job #2532231) | Cod sursa (job #1334442) | Cod sursa (job #1689419) | Cod sursa (job #1670173)
#include <cstdio>
#include <vector>
#include <utility>
#include <cmath>
#include <bitset>
using namespace std;
FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");
#define mp make_pair
#define fi first
#define se second
#define pb push_back
#define fs(n) fscanf(f,"%I64d",&n)
#define fp fprintf
vector < pair<int,int> > v;
#define nmax 1000010
bitset <nmax/2+1> p;
int prim[nmax/4];
int i,j,m;
long long x,s,nr,n;
int main()
{
prim[0]=2;x=nmax;
for(i=1; (((i*i)<<1)+(i<<1))<=x; ++i)
{
if(!p[i])
{
for(j=(((i*i)<<1)+(i<<1)) ; (j<<1) <=x; j+= (i<<1) +1 )
p[j]=1;
}
}
m=0;
for(i=1; (i<<1)+1<nmax; ++i)
if(!p[i])
prim[++m]=(i<<1)+1;
fs(n);
for(i=1;i<=n;i++)
{
fs(x);
v.clear();
for( j=0; j<=m && x>1; ++j)
if(x%prim[j]==0)
{
v.pb(mp(prim[j],1));
x/=prim[j];
while(x%prim[j]==0)
{
v.back().se++;
x/=prim[j];
}
}
if(x!=1)
v.pb(mp(x,1));
nr=1;
s=1;
for( j=0; j<v.size(); ++j)
{
nr*=v[j].se+1;
s*=(pow(v[j].fi,v[j].se+1)-1)/(v[j].fi-1);
s%=9973;
}
fp(g,"%I64d %I64d\n",nr,s);
}
}