Cod sursa(job #1902640)

Utilizator rares_ciocieaRares Andrei Ciociea rares_ciociea Data 4 martie 2017 18:26:45
Problema Suma divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
unsigned long long a,b;
bitset <10001> ciur;
void ciurr()
{
    int i,j;
    ciur[1]=ciur[0]=1;
    for(i=4;i<=10000;i++)
        ciur[i]=1;
    for(i=3;i*i<=10000;i+=2)
    if(ciur[i]==1)
        for(j=i*i;j<=10000;j++)
            ciur[i]=0;
}
unsigned long long put(unsigned long long n,unsigned long long p)
{
  unsigned long long r=1,c;
    while(p!=1)
    {
        if(p%2==0)
        {
            p=p/2;
            n=(n*n);
        }
        else
        {
            p=p-1;
            r=(r*n);
        }
    }
    n=n*r;
    return n;
}
void desc()
{
    unsigned long long j=2,p,n=9901;
    unsigned long long sol=1;
    for(j=2; j*j<=a; j++)
    {
        if(a%j==0)
        {
            p=0;
            while(a%j==0)
            {
                p++;
                a/=j;
            }
            p*=b;
            sol*=((put(j,p+1)-1)/(j-1));

            sol%=n;
        }

    }
    if(a!=1)
    {
        p=b;
        sol*=((put(a,p+1)-1)/(a-1));
        sol%=n;
    }
    out<<sol%n;
}
int main()
{
    in>>a>>b;
    ciurr();
    desc();
    return 0;
}