Pagini recente » Istoria paginii runda/bkt2_oct2011/clasament | Borderou de evaluare (job #1425812) | Borderou de evaluare (job #3226476) | Cod sursa (job #816261) | Cod sursa (job #2692326)
#include <fstream>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
ifstream be("ssnd.in");
ofstream ki("ssnd.out");
int MOD=9973,nmax=1e6;
vector<bool>a((nmax)/2+1,true);
int hanyprim=0;
void szita()
{
a[0]=false;
for(int i=1;i<=nmax/2;i++)
{
if(a[i]==true){
hanyprim++;
int prim=2*i+1;
for(int j=3;prim*j<=nmax;j+=2)
a[(prim*j)/2]=false;
}
}
}
long long hatvany(long long n,long long p)
{
if(p!=0){
long long x=hatvany(n,p/2);
if(p%2==0){
return (x*x);
}
else{
return ((x*x)*n);
}
}else return 1;
}
int main()
{
int m;
long long n;
be>>m;
szita();
vector<int>prim(hanyprim+1);
int k=1;
prim[0]=2;
for(int i=1;i<=nmax/2;i++)
{
if(a[i]==true)
prim[k++]=2*i+1;
}
for(int i=0;i<m;i++){
be>>n;
long long db=1,db1=1;
for(int i=0;i<k && n>=prim[i]*prim[i];i++){
int j=0;
int p=prim[i];
if( n%p==0)
{
while(n%p==0)
{
j++;
n=n/p;
}
db=(db*(j+1))%MOD;
db1=(db1*((hatvany(p,j+1)-1)/(p-1)%MOD))%MOD;
}
}
if(n>1)
{
db=db*2%MOD;
db1=db1*((hatvany(n,2)-1)/(n-1)%MOD)%MOD;
}
ki<<db<<" "<<db1<<'\n';
}
return 0;
}