Занятие 3. Справочник
Функция быстрого возведения в степень
static double binpow (double a, int n)
{
if (n == 0)
return 1;
if (n % 2 == 1)
return binpow (a, n-1) * a;
else {
double b = binpow (a, n/2);
return b * b;
}
}
Разложение на слагаемые
import java.io.*;
import java.util.Scanner;
public class Test {
static PrintWriter out = new PrintWriter(System.out);
static Scanner in = new Scanner(System.in);
static int[] m = new int[41]; //из максимальных ограничений
static int S = 0;
static int N = 0;
public static void main(String[] args)
{
N = in.nextInt();
m[0] = 1;
solve(1);
out.flush();
}
static void solve(int k)
{
for (int i = m[k - 1]; S + i <= N; i ++)
{
m[k] = i;
S += m[k];
if (S == N) printSolution(k); //решение найдено, выводим!
else solve(k + 1);
S -= m[k];
}
}
static void printSolution(int k)
{
for (int i = 1; i <= k; i++)
{
out.print (m[i] + " ");
}
out.println();
}
}