Cod sursa(job #2632284)

Utilizator UpgradeStrikeMurgilas Mihai-Rares UpgradeStrike Data 2 iulie 2020 17:46:45
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

unsigned long long p[100005],exp[100005];
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
int main()
{
    int n,b;
    in>>n>>b;
    if(n==0)
        out<<0;
    else
    if(b==0||n==1)
        out<<1;
    else
    {
        unsigned long long c,d,i,sd=1;
        c=n;
        d=2;
        while(c%d==0)
        {
            p[1]=d;
            c/=d;
            exp[1]++;
        }
        if(p[1]==d)
            i=2;
        else
            i=1;
        d=3;
        while(c>1)
        {
            while(c%d==0)
            {
                p[i]=d;
                c/=d;
                exp[i]++;
            }
            if(p[i]==d)
                i++;
            d+=2;
        }
        for(c=1;c<i;c++)
        {
            unsigned long long t=1,k=1,j;
            for(j=1;j<=exp[c];j++)
                t*=p[c];
            for(j=1;j<=b;j++)
                k*=t;
            k*=p[c];
            sd*=(k-1)/(p[c]-1);
        }
        out<<sd%9901;
    }
    return 0;
}