Pagini recente » Cod sursa (job #2046274) | Cod sursa (job #2591591) | Cod sursa (job #1309740) | Cod sursa (job #296009) | Cod sursa (job #641549)
Cod sursa(job #641549)
#include <fstream>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const int N=32000;
const int P=9973;
unsigned int v[N],bit[33],prime[5*N];
int nrprime;
inline bool viz(int x){
int a,b;
a=x/32;
b=x%32;
if(v[a]&bit[b])
return true;
return false;
}
inline void marcheaza(int x){
int a,b;
a=x/32;
b=x%32;
v[a]=v[a]|bit[b];
}
void ciur(){
int i,n;
n=1000000;
bit[0]=1<<31;
for(i=1;i<=31;i++){
bit[i]=(bit[i-1]>>1);
}
int j;
for(i=2;i*i<=n;++i){
if(viz(i)==false){
for(j=i*i;j<=n;j+=i){
marcheaza(j);
}
}
}
for(i=2;i<=n;i++){
if(viz(i)==false){
nrprime++;
prime[nrprime]=i;
}
}
}
int exprapid(int x,int n){
int rez=1;
while(n!=0){
if(n%2!=0){
rez=(rez*x)%P;
}
x=(x*x)%P;
n=n/2;
}
rez=rez%P;
return rez;
}
void sumdiv(int x){
int i,cx,div,nr=1,sum=1;
cx=x;
i=1;
while(prime[i]<=x){
div=0;
while(!(x%prime[i])){
div++;
x/=prime[i];
}
nr=nr*(div+1);
nr=nr%P;
sum=(sum*(exprapid(prime[i],div+1)-1))%P;
sum=(sum*(exprapid((prime[i]-1),P-2)))%P;
i++;
}
out<<nr<<" "<<sum<<"\n";
}
int main(){
int t,i,x;
in>>t;
ciur();
for(i=1;i<=t;i++){
in>>x;
sumdiv(x);
}
return 0;
}