Nu aveti permisiuni pentru a descarca fisierul grader_test1.ok
Cod sursa(job #3216829)
| Utilizator | Data | 19 martie 2024 23:08:23 | |
|---|---|---|---|
| Problema | Suma divizorilor | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.03 kb |
#include <fstream>
#include <iostream>
#include <vector>
#define MOD 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
vector <pair<long long int,long long int>> div;
long long int A,B,ans=1;
long long int exp(long long int val,int e);
int main()
{
fin>>A>>B;
int d=2;
while(d*d<=A)
{
int ex=0;
while(A%d==0)
{
ex++;
d/=A;
}
if(ex)
div.push_back({d,ex});
d++;
}
if(A>1)
div.push_back({A,1});
for(int i=0;i<div.size();i++)
{
long long int E=div[i].second;
E=(E%(MOD-1)*B+1)%(MOD-1);
long long int aux=(exp(div[i].first,E)-1+MOD)%MOD;
long long int aux1=exp(div[i].first-1,MOD-2);
ans=ans*aux%MOD*aux1%MOD;
}
fout<<ans;
return 0;
}
long long int exp(long long int val,int e)
{
if(!e)
return 1;
int aux=exp(val,e/2);
if(e%2)
return aux*aux%MOD*val%MOD;
return aux*aux%MOD;
}
