Pagini recente » Cod sursa (job #1345521) | Cod sursa (job #2613617) | Cod sursa (job #633969) | Cod sursa (job #1643683) | Cod sursa (job #2422442)
#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;
}
}
if (a != 1)
{
puteri[a] = b;
prime.push_back(a);
}
}
int main()
{
int j,suma = 0,prod = 1;
in >> a >> b;
if (a == 0)
{
out << "0";
return 0;
}
if (a == 1)
{
out << "1";
return 0;
}
if (b == 0)
{
out << "1";
return 0;
}
descomp(a);
vector <int>::iterator i;
for (i=prime.begin(); i<prime.end(); i++)
{
suma = 0;
for (j=0; j<=puteri[*i]; j++)
{
suma = suma + ridica(*i, j);
suma %= mod;
}
prod = ((prod%mod)*(suma))%mod;
}
out << prod;
return 0;
}