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