Как найти ближайшее простое число, если первая цифра 6, 8 или 9?

lizaliza

Новый пользователь
Сообщения
1
Реакции
0
Помогите,пожалуйста,написать 2 программки с пояснениями,что и как...в программировании я полнейший ноль,а заданий понадавали выше крыши...и сказали "делайте как хотите"...не сплю уже 3 дня из-за них...
1.Дано натуральное число. Если первая цифра числа - 6,8 или 9,то найти ближайшее к этому числу простое число, в противном случае перевести число в 5-ричную систему счисления.
2.Дана последовательность вещественных чисел {aj}j=1...n (n<=40).Упорядочить элементы последовательности до первого числа, целая
часть которого есть квадрат целого числа, (включительно) по не убыванию, а остальные элементы - по не возрастанию дробной части.
 
не сплю уже 3 дня из-за них...
Если задача сложная, нужно разбить её на несколько простіх подзадач.
1.Дано натуральное число. Если первая цифра числа - 6,8 или 9,то найти ближайшее к этому числу простое число, в противном случае перевести число в 5-ричную систему счисления.
1. Считіваем число
2. Сохраняем поразрядно число в массив.
3. Обходим массив с "оторванніми" числами на проверку 6, 8, 9
4. Если условие истина - находим простое число(тут уточнение, ближайшее до или после введённого?) В решении выводится оба варианта, оставьте нужный.
5. Иначе переводим в 5-ричную систему. (Я щас не вспомню как это делается, там надо отрывать разряды, остатки потом складывать, умножать, возводить в степень с основанием 5). Попробуйте самостоятельно эту часть решить.
P.S. Решение не претендует на изысканность и профессионализм, но поставленную задачу выполняет. :)
C++:
// Дано натуральное число. Если первая цифра числа - 6, 8 или 9,
// то найти ближайшее к этому числу простое число,
// в противном случае перевести число в 5-ричную систему счисления...
#include < iostream >
using std::cout;
using std::cin;
using std::endl;
#include < math.h >

    // Функция расчитывающая количество чисел во введённом числе...
    int Rasriad(int enterNumber) {
        int n = enterNumber, x = 0;
        while (n != 0) {
            n /= 10;
            x++;
        }
        return x;
    }
    //Функция нахождения простого числа
int PlainNumber(int num) {
        int a, count = 1, res;

        res = sqrt(num);
        for (a = 1; a <= res; a++) {
            if (num % a == 0 && count <= 2)
                count++;
        }
        if (count <= 2)
            return num;
        else
            return -1;
    }
    // Главная функция main
int main() {
        int enterNumber,
        lenght = 0,
            resultat,
            z;

        cout << "Enter Number: ";
        cin >> enterNumber;

        // определяет количество цифр в нем и их сумму.
        lenght = Rasriad(enterNumber);
        int * array = new int[lenght];

        // cout << "In Number:" << enterNumber << " Kol-vo chisel = " << lenght << endl << endl; // Вот эту строку

        int decimal = 1;
        for (int j = 1; j < lenght; j++)
            decimal *= 10;

        // Сохраняем поразрядно в массив
        // Хотя по существу это лишнее, достаточно одной операции
        // По выявлению самого высшего разряда на 6, 8, 9
        for (int j = 0; j < lenght; j++) {
            array[j] = enterNumber / decimal % 10;
            decimal /= 10;
        }

        // Если 1 разряд равен 6, 8, 9 - найти ближайшее к нему простое
        if (array[0] == 6 || array[0] == 8 || array[0] == 9) {
            for (int i = enterNumber; i > 1; i--) {
                resultat = PlainNumber(i);
                if (resultat != -1) {
                    cout << " PROSTOE: " << resultat << endl;
                    break;
                }
            }
            for (int i = enterNumber; i < INT_MAX; i++) {
                resultat = PlainNumber(i);
                if (resultat != -1) {
                    cout << " PROSTOE: " << resultat << endl;
                    break;
                }
            }
        }
        // Иначе переводим число в пятиричную систему счисления.
        else {
            cout << " Perevod v 5-richnuyu sistemu" << endl;
        }

        cin >> z;

        return 0;
    }
    //---------------------------------------------------------------------------

2.Дана последовательность вещественных чисел {aj}j=1...n (n<=40).Упорядочить элементы последовательности до первого числа, целая
часть которого есть квадрат целого числа, (включительно) по не убыванию, а остальные элементы - по не возрастанию дробной части.
За это задание совершенно не понял, простите.
 
Последнее редактирование модератором:
Мне было бы проще перевести число в строковую переменную и посмотреть первую "букву"
(извините что на Бейсике)
Код:
if left$(CStr(N), 1) Like [6, 8, 9] Then
или так:
Код:
Х=left$(CStr(N), 1)
if X="6" Or X="8" Or X="9" Then
Но работа со строковыми переменными у программы займет больше времени
Про простые числа есть совет:
Если будете искать простое число по принципу перебора последовательности чисел, проверяя их на то, делятся ли они на что то кроме себя и единици, то берите только нечетные числа и проверяйте, делятся ли они на (нечетные, или простые) числа начиная с 3, заканчивая корнем квадратным с числа. То есть, чтобы узнать, является ли число 1000001 простым - достаточно проверить делимость на числа до 1000 (что в тысячу раз меньше, чем миллион) Но ,если позволяют ресурсы, то можно, чтобы таблица простых чисел была у программы уже готовая (в отдельном файле)
 
Последнее редактирование модератором:
Назад
Сверху Снизу