Pagini recente » Cod sursa (job #2125197) | Cod sursa (job #1038401) | Cod sursa (job #2823211) | Cod sursa (job #390135) | Cod sursa (job #876835)
Cod sursa(job #876835)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
#define Nmax 10001
#define modulo 9901
unsigned long long div[Nmax];
char ciur[1<<18];
unsigned long long A, B, res = 1, l, A1;
void gen(){
div[++l] = 2;
for(unsigned long long i = 3; i < Nmax; i += 2){
if(ciur[i >> 4] & (1 << ((i >> 1) & 7)))
continue;
div[++l] = i;
for(unsigned long long j = i + (i << 1); j < Nmax; j += (i << 1))
ciur[j >> 4] |= ( 1 << ((j >> 1) & 7) ) ;
}
}
inline unsigned long long putere(unsigned long long a, unsigned long long b){
unsigned long long result = 1;
a %= modulo;
for(unsigned long long i = 0; (1 << i) <= b; i++){
if( (1 << i) & b )
result = (result * a) % modulo;
a = (a * a) % modulo;
}
return result;
}
unsigned long long prog(unsigned long long a, unsigned long long b){
if( a % modulo == 1)
return b * B + 1;
else
return ( putere ( a, b * B + 1 ) + modulo - 1 ) * ( putere ( a - 1, modulo - 2) ) % modulo;
}
void citire(){
ifstream f("sumdiv.in");
f >> A >> B;
A1 = A;
f.close();
}
void rezolva(){
for(unsigned long long i = 1, p = 0; div[i] * div[i] <= A; i++)
if(A % div[i])
continue;
else{
for(p = 0 ; A1 % div[i] == 0 ; A1 /= div[i], p++);
if(p)
res = ( res * 1LL * prog ( div[i], p ) ) % modulo;
}
if(A1)
res = ( res * 1LL * prog ( A1, 1 ) ) % modulo;
}
void afis(){
ofstream g("sumdiv.out");
g << res << "\n";
g.close();
}
int main(){
citire();
gen();
rezolva();
afis();
return 0;
}