Pagini recente » Cod sursa (job #779488) | Cod sursa (job #281586) | Cod sursa (job #2252183) | Cod sursa (job #528622) | Cod sursa (job #1343700)
#include <fstream>
#include <vector>
#include <bitset>
#define MOD 9973
#define DIM 1000010
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int n,t;
bitset<DIM> viz;
vector<int> prim;
void ciur(){
int i,j;
prim.push_back(2);
for(i=3;i<DIM;i+=2){
if(!viz[i]){
prim.push_back(i);
for(j=i+i;j<=DIM;j+=i) viz[j]=1;
}
}
}
int up(int a,int b){
if(b==1)
return a%MOD;
int q=up(a,b/2);
q=((q%MOD)*(q%MOD))%MOD;
if(b%2) q=(q*a)%MOD;
return q;
}
int main(void){
register int i,j,x,y,exp;
int sol1,sol2;
ciur();
f>>t;
for(;t>0;t--){
f>>n;
//nr divizorilor
sol1=1,sol2=1;
for(i=0;i<prim.size() && prim[i]*prim[i]<=n && n!=1;i++){
exp=1;
while(n%prim[i]==0)
n/=prim[i],exp++;
sol1=(sol1*(exp%MOD))%MOD;
x=up(prim[i],exp)-1;
if(x<0) x+=MOD;
y=up((prim[i]-1)%MOD,MOD-2);
x=(x*y)%MOD;
sol2=(sol2*x)%MOD;
}
if(n!=1){
n%=MOD;
sol1*=2;
x=(n*n)%MOD-1;
if(x<0) x+=MOD;
y=up((n-1)%MOD,MOD-2);
x=(x*y)%MOD;
sol2=(sol2*x)%MOD;
}
g<<sol1<<" "<<sol2<<"\n";
}
f.close();
g.close();
return 0;
}