Pagini recente » Cod sursa (job #2057760) | Cod sursa (job #1326932) | Cod sursa (job #1224155) | Cod sursa (job #2071501) | Cod sursa (job #933115)
Cod sursa(job #933115)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("sumdiv.in"); ofstream g("sumdiv.out");
const int nmod = 9901;
bitset <8000> ciur;
int prim[8000];
int a, b, s, at, p, ss, sumMult;
int i, j, n, m, t;
void gcd (int a, int b, int &x, int &y){
if (b==0){
x=1; y=0;
}
else {
int x0, y0;
gcd (b, a%b, x0, y0);
x = y0;
y = x0 - (a/b)*y0;
}
}
int pow (int x, int y){
if (y==1) return x % nmod;
int p = pow (x, y/2);
if (y%2) return x*p*p % nmod;
else return p*p % nmod;
}
int main(){
prim[++t]=2;
for (i=3; i<=8000; i+=2){
if (ciur[i]==0){
prim[++t]=i;
for (j=i*i; j<=8000; j+=i*2) ciur[j]=1;
}
}
f>>a>>b;
s=1;
at=a;
while (a!=1){
for (m=1; prim[m]*prim[m]<=a && a%prim[m]; m++);
if (prim[m]*prim[m]>a){
s = s * ((a*a-1) / (a-1)) % nmod;
a=1;
}
else {
p=prim[m];
while (a%prim[m]==0){
p*=prim[m];
a/=prim[m];
}
s = s * ((p-1) / (prim[m]-1) ) % nmod;
}
}
a=at;
ss = pow (a, b+1); //
int t1, inv;
gcd ((a-1), nmod, inv, t1);
sumMult = ((ss-1) * inv ) - a - 1;
s = (s + sumMult);
while (s<0) s+= nmod;
s%= nmod;
g<<s;
}