Как реализовать проверку всех чисел из заданных. - C (СИ)
Формулировка задачи:
Доброго времени суток, подскажите пожалуйста как реализовать проверку всех чисел из заданных. Ну например: вводим max член последовательности прописываем как for(i=0; i<=max; i++) и теперь задача прогнать это значение в переменных а и b но не 1-1; 2-2;3-3 и тд, а 1-27;6-84 и тому подобные.
Собственно текст задачи вот:
Найти все такие пары натуральных чисел a и b, что если число a возвести в квадрат и к полученному числу приписать справа десятичную запись числа b, то получится число, большее произведения чисел a и b ровно в три раза.
Возможно я что-то не так понял или реализовал в своем примере, подкиньте пару идей пожалуйста, буду признателен
Решение задачи: «Как реализовать проверку всех чисел из заданных.»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
int main ( ) {
unsigned long long int a = 1,
order = 10,
b;
while (1) {
b = a * a * order / (3 * a - 1);
if (log2(a) * 2 + log2(b) >= (sizeof(b) * 8 - 1)) break;
if ( (a * a * order) % (3 * a - 1) == 0 )
if ( b >= (order / 10) && b < order ) printf("%llu %llu\n", a, b);
if ( b >= order ) {
order *= 10;
a = 0;
}
a += 1;
}
printf("Arithmetic overflow");
}
Объяснение кода листинга программы
В этом коде выполняется проверка всех чисел в заданном диапазоне на простоту.
- Тип данных и объявление переменных:
- Тип данных: 32-битный беззнаковый целый (unsigned long long int).
- Переменные:
a: текущее проверяемое число.order: порядок проверки (количество чисел для проверки).b: результат проверки текущего числа на простоту.
- Цикл проверки:
- Бесконечный цикл, который прерывается при достижении определенного условия или при нахождении простого числа.
- Внутри цикла вычисляется значение
b, представляющее собой результат проверки текущего числаaна простоту. - Если
log2(a)больше или равно логарифму числаbпо основанию 2, увеличенному на 1 (для учета размера числаb), то цикл прерывается. - Если
aумноженное наaумноженное наorderделится без остатка на(3*a-1)иbбольше или равноorder/10и меньшеorder, то числаaиbвыводятся на экран. - Если
bбольше или равноorder, то числоorderумножается на 10, аaсбрасывается в 0, чтобы перейти к следующему диапазону чисел. - После окончания цикла выводится сообщение об арифметическом переполнении.
- Условие выхода из цикла:
- Цикл прерывается, когда
log2(a)больше или равно логарифму числаbпо основанию 2, увеличенному на 1, или когдаbбольше или равноorder.
- Цикл прерывается, когда
- Вывод на экран:
- Если числа
aиbудовлетворяют определенным условиям, они выводятся на экран. - В конце программы выводится сообщение об арифметическом переполнении.
- Если числа