Cod sursa(job #1901917)

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

long long a, n, p, i, j, e, m, s=1, q[NMax+5], k;
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\n", p);

    k=0;
    for (i=2; i<=p; i++){
        if (viz[i]==0){
            q[++k]=i;
            for (j=2; j*i<=p; j++)
                viz[i*j]=1;
        }
    }

    i=1;
//    printf("%d\n", k);
    while (q[i]*q[i]<=p && i<=k){
        e=0;
        m=q[i];
        while (p%q[i]==0){
            p/=q[i];
            e++;
            m*=q[i];
        }
        if (e) s=(s*(m-1)/(q[i]-1))%9901;
        ++i;
    }

    if (p>1) s=(s*((p*p-1)/(p-1)))%9901;
    printf("%lld", s);
}