Cod sursa(job #1901870)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 4 martie 2017 11:40:05
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <cmath>
#define NMax 7071
using namespace std;

long long a, n, p, i, j, e, m, s=1;
bool viz[NMax+5];
int main (){
    freopen("sumdiv.in", "r", stdin);
    freopen("sumdiv.out", "w", stdout);

    scanf("%lld%lld", &a, &n);
    p=1;
    while (n){
        if (n%2){
            p=(p*a)%9901;
            --n;
        }
        else {
            a=(a*a)%9901;
            n/=2;
        }
    }
//    printf("%lld", p);

    n=p;
    for (i=2; i*i<=p; i++){
        if (viz[i]==0){
            e=0;
            m=i;
            while (n%i==0){
                n/=i;
                e++;
                m=m*i;
            }
            if (e) s=(s*(m-1)/(i-1))%9901;

            for (j=2; i*j<=p; j++)
                viz[i*j]=1;
        }
    }
    if (n>1) s=(s*(n*n-1)/(n-1))%9901;
    printf("%lld", s);
}