Матч
17, Биквадратные
суммы (BisquareSums)
Число b называется биквадратным, если существуют (возможно равные) такие
целые числа x и y, что x2 + y2 = b. По заданным числам low
и high вычислить количество
биквадратных чисел на отрезке [low; high].
Класс: BisquareSums
Метод: int
getSums(int low, int high)
Ограничения:
1 £ low £ 100, low £ high £ 100.
Вход. Два целых числа low и high.
Выход. Количество биквадратных чисел на отрезке [low; high].
Пример входа
low |
high |
1 |
5 |
7 |
7 |
56 |
99 |
Пример выхода
4
0
16
РЕШЕНИЕ
перебор
Обнулим
массив m длины 101. Переберем все возможные значения i и j от 0 до 100 и
присвоим m[i*i + j*j] = 1. Таким образом, число b является биквадратным, если m[b] = 1. Просматриваем ячейки массива m
от low до high и подсчитываем в переменной s количество таких, которые содержат в себе 1.
ПРОГРАММА
#include <stdio.h>
#include <memory.h>
int m[101];
class BisquareSums
{
public:
int getSums(int low, int high)
{
int i, j, s;
memset(m,0,sizeof(m));
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
if (i*i + j*j <= 100) m[i*i+j*j] = 1;
for(s = 0,i = low; i <= high; i++) if (m[i]) s++;
return s;
}
};