Pagini recente » Cod sursa (job #551437) | Cod sursa (job #1288326) | Cod sursa (job #123936) | Cod sursa (job #962260) | Cod sursa (job #2422440)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const int mod = 9901;
vector <int> prime;
int puteri[10000];
bool ciur[10000];
int a,b;
int ridica(int a,int b)
{
int rasp = 1;
while(b != 0)
{
if (b%2 == 1)
{
rasp = (rasp * (a%mod)) %mod;;
b--;
}
else
{
a = ((a)%mod*(a)%mod)%mod;
b /= 2;
}
}
return rasp;
}
void descomp(int a)
{
int i,cnt;
for (i=2; i*i<=a; i++)
{
if (a%i == 0)
{
prime.push_back(i);
cnt = 0;
while (a%i == 0)
{
cnt++;
a /= i;
}
puteri[i] = cnt*b;
}
}
if (a != 1)
{
puteri[a] = b;
prime.push_back(a);
}
}
int main()
{
int j,suma = 0;
in >> a >> b;
descomp(a);
vector <int>::iterator i;
for (i=prime.begin(); i<prime.end(); i++)
{
for (j=0; j<=puteri[*i]; j++)
{
suma = suma + ridica(*i, j);
suma %= mod;
}
}
out << suma;
return 0;
}