Cod sursa(job #2499372)

Utilizator sygAndreiIonitaIonita Andrei sygAndreiIonita Data 25 noiembrie 2019 23:30:07
Problema Suma divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <bitset>

using namespace std;

bitset <50000001> p;
int v[500001];
const int MOD=9901;

ifstream in ("sumdiv.in");
ofstream out ("sumdiv.out");

int pw (long long exp,int a)
{
    int sol=1,i;
    for (i = 0; (1<<i) <= exp; ++i)
    {
        if ( ((1<<i) & exp) > 0)
            sol= (sol * a) % MOD;
        a=(a * a) % MOD;
    }
    return sol;
}

int main()
{
    int a,b,cnt=0,i,j;
    long long exp,s=1;
    for (i=2; i<=50000000; i++)
        if (!p[i])
        {
            v[++cnt]=i;
            for (j=i*i; j<=50000000; j+=i)
                p[j]=1;
        }
    in>>a>>b;
    for (i=1;v[i]*v[i]<=a;i++)
    {
      exp=0;
      while (a%v[i]==0)
          exp++,a/=v[i];
      exp*=b;
      s=(s*((pw(exp+1,v[i])-1)/(v[i]-1)))%MOD;
    }
    if (a>1)
    {
      exp=b;
      s=(s*((pw(exp+1,a)-1)/(a-1)))%MOD;
    }
    out<<s;
    return 0;
}