Cod sursa(job #2772260)

Utilizator sandu_stefanSandu Stefan sandu_stefan Data 31 august 2021 15:00:05
Problema Suma divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;
int sumdiv(int a,int b,int &p){
    int nr;
    long long x,y;
    if (a%2==0){
        nr=0;
        while (a%2==0){
            nr=nr+1;
            a=a/2;
        }
        nr=nr*b+1;
        x=2;
        y=1;
        while (nr!=0){
            if (nr%2==1){
                y=y*x%9901;
            }
            x=x*x%9901;
            nr=nr/2;
        }
        p=p*(y-1)%9901;
    }
    for (int i=3;i*i<=a;i=i+2){
        nr=0;
        if (a%i==0){
            while (a%i==0){
                nr=nr+1;
                a=a/i;
            }
            nr=nr*b+1;
            x=i;
            y=1;
            while (nr!=0){
                if (nr%2==1){
                    y=y*x%9901;
                }
                x=x*x%9901;
                nr=nr/2;
            }
            p=p*((y-1)/((i-1)%9901))%9901;
        }
    }
    return p;
}

int main()
{
    ifstream f("sumdiv.in");
    ofstream g("sumdiv.out");
    int a,b,p;
    f>>a>>b;
    p=1;
    g<<sumdiv(a,b,p);
    return 0;
}