Pagini recente » Cod sursa (job #1594742) | Cod sursa (job #2446392) | Cod sursa (job #2445164) | Cod sursa (job #2032208) | Cod sursa (job #1170813)
#include <fstream>
#include <bitset>
using namespace std;
const long long mod = 9973;
long long t,i,n,c,p,sol1,sol2,j,nr,x,y;
bitset<1000005> ciur;
long long prime[500005];
void euclid(long long a, long long b, long long &x, long long &y) {
if(b==0) {
x=1;
y=0;
return;
}
long long xa,ya;
euclid(b,a%b,xa,ya);
x=ya;
y=xa-(a/b)*ya;
}
int main() {
ifstream f("ssnd.in");
ofstream g("ssnd.out");
f>>t;
ciur[1]=1;
for(i=2;i<=1000001;i++) {
if(ciur[i]==0) {
prime[++n]=i;
for(j=i+i;j<=1000001;j+=i)
ciur[j]=1;
}
}
while(t--) {
f>>nr;
sol1=sol2=1;
for(i=1;i<=n && prime[i]*prime[i]<=nr;i++) {
c=0;p=1;
while(nr%prime[i]==0)
nr/=prime[i],c++,p=(p*prime[i])%mod;
if(p>1) {
p=(p*prime[i])%mod;
p--;
if(p<0)
p+=mod;
euclid(mod,prime[i]-1,x,y);
if(y<0)
y=(y+mod*((0-y)/mod+1))%mod;
sol2=(sol2*y*p)%mod;
}
sol1*=(c+1);
}
if(nr!=1) {
p=nr;
if(p>1) {
p=(p*nr)%mod;
p--;
if(p<0)
p+=mod;
euclid(mod,nr-1,x,y);
if(y<0)
y=(y+mod*((0-y)/mod+1))%mod;
sol2=(sol2*y*p)%mod;
}
sol1*=2LL;
}
g<<sol1<<" "<<sol2<<"\n";
}
return 0;
}