Cod sursa(job #1184964)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 14 mai 2014 18:46:39
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <bitset>
#define MOD 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("subdiv.out");
int a, b, prime[10005], numpr, k, sumd, nrd, powr;
bitset<1010> ciur;
inline void erast()
{
    ciur[1]=1;
    for (int i=2; i<=10001; i++)
        if (ciur[i]==0)
            for (int j=2; j*i<=10001; j++)
                ciur[j*i]=1;
}
inline long long powd(long long base, int powr)
{
    long long res=1;
    while (powr!=0) {
        if (powr%2==1)
            res*=base;
        base*=base;
        powr=powr/2;
    }
    return res;
}
int main()
{
    erast();
    for (int i=1; i<=10001; i++)
        if(ciur[i]==0)
            prime[++k]=i;
    f>>a>>b;
    nrd=1;
    sumd=1;
    for (int i=1; 1LL*prime[i]*prime[i]<=a; i++) {
        powr=0;
        while (a%prime[i]==0) {
            powr++;
            a/=prime[i];
        }
        if (powr>0)
            sumd=(sumd*(powd(prime[i], powr*b+1)-1)/(prime[i]-1))%MOD;
    }
    if (a!=1)
        sumd=(sumd*(powd(a, b+1)-1)/(a-1))%MOD;
    g<<sumd<<"\n";
    return 0;
}