Cod sursa(job #1065068)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 22 decembrie 2013 18:42:52
Problema Suma divizorilor Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>


const int p = 9901;

// euclid extins => d = gcd(a, b) = ax + by
int gcd(int a, int b, int *x, int *y)
{
    if (b == 0)
    {
        *x = 1;
        *y = 0;
        return a;
    }
    else
    {
        int xp, yp;
        int d = gcd(b, a%b, &xp, &yp);

        *x = yp;
        int m = ((long long)((a/b) % p) * (long long) yp) % p;
        *y = (xp - m + p) % p;

        // atentie aici
        // operatiile trebuie efectuate modulo p
        // fie p foarte mare: 10 000 000 007
        // 0 <= yp < p              incape in int   
        // 0 <= ((x/y) % p) < p     incape in int

        return d;
    }
}

int main()
{
    int a, b, s;
    int i, power;
    freopen("sumdiv.in", "r", stdin);
    freopen("sumdiv.out", "w", stdout);
    
    scanf("%d %d", &a, &b);
    
    power = 1;
    for (i = 1; i <= b; ++i)
    {
        power *= a;
        power %= p;
    }
    
    s = 1 + power; // 1 | a si a | a      
    for (i = 2; i <= power/2; ++i)
    {
        if ((power%i) == 0)
        {
            s += i;
            s %= p;
        }
    }
    
    printf("%d\n", s);
}