Pagini recente » Atasamentele paginii Poze preONI 2007 - gratar | Monitorul de evaluare | Cod sursa (job #822964) | Cod sursa (job #865089) | Cod sursa (job #1670149)
#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> p;
int prim[nmax/4];
unsigned long long i,j,m;
unsigned 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) + (1<<i); (j<<1) +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);
}
}