Как реализовать проверку всех чисел из заданных. - 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");
}

Объяснение кода листинга программы

В этом коде выполняется проверка всех чисел в заданном диапазоне на простоту.

  1. Тип данных и объявление переменных:
    • Тип данных: 32-битный беззнаковый целый (unsigned long long int).
    • Переменные:
      • a: текущее проверяемое число.
      • order: порядок проверки (количество чисел для проверки).
      • b: результат проверки текущего числа на простоту.
  2. Цикл проверки:
    • Бесконечный цикл, который прерывается при достижении определенного условия или при нахождении простого числа.
    • Внутри цикла вычисляется значение 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, чтобы перейти к следующему диапазону чисел.
    • После окончания цикла выводится сообщение об арифметическом переполнении.
  3. Условие выхода из цикла:
    • Цикл прерывается, когда log2(a) больше или равно логарифму числа b по основанию 2, увеличенному на 1, или когда b больше или равно order.
  4. Вывод на экран:
    • Если числа a и b удовлетворяют определенным условиям, они выводятся на экран.
    • В конце программы выводится сообщение об арифметическом переполнении.

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы