Skip to content

Latest commit

 

History

History
67 lines (53 loc) · 1.61 KB

README.org

File metadata and controls

67 lines (53 loc) · 1.61 KB

CATP #06.B

O objetivo deste CATP é o de contar, usando a linguagem Prolog, quantas vezes um número pode ser expresso como a soma de potências de números inteiros. Dado dois números inteiros x e n, nós precisamos contar quantas vezes x pode ser expresso como a soma e potências de n de números naturais únicos. É dado que o valor de n deve ser entre 1 e 20 inclusive. O código abaixo em C foi retirado de GeeksForGeeks. No link encontram-se implementações em outras linguagems que podem auxiliá-lo a realizar este CATP.

  • Implemente a mesma coisa em Prolog, lembrando que
    X is 3 ** 4
        

    Faz com que o resultando de 3^4 seja unificado com X.

#include<stdio.h>
#include<math.h>

int countWaysUtil(int x, int n, int num)
{
    // Base cases
    int val = (x - pow(num, n));
    if (val == 0)
        return 1;
    if (val < 0)
        return 0;
 
    // Consider two possibilities, num is
    // included and num is not included.
    return countWaysUtil(val, n, num + 1) +
           countWaysUtil(x, n, num + 1);
}
 
// Returns number of ways to express
// x as sum of n-th power of two.
int countWays(int x, int n)
{
    return countWaysUtil(x, n, 1);
}
 
// Driver code
int main()
{
    int x = 100, n = 2;
    printf("%d\n", countWays(x, n));
    return 0;
}

Compile o código acima com

gcc countways.c -o countways -lm