Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 14.11.2019
Сообщений: 74

Произведение цифр простого числа равно его порядковому номеру среди всех простых чисел

21.11.2019, 20:58. Показов 1795. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
так как я имею только представление о программировании, смог сделать лишь это: объединение решета Эратосфена и моей жалкой задумки. Объсните пожалуйста в чём именно моя ошибка. как правильно поступать в таких ситуациях? я готов критике. есть предположение о несовместимости boolean и int, неправильное использование цикла for.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.company;
 
import java.util.Arrays;
 
public class Main {
 
        public static void main(String[] args) {
            boolean [] prime = getPrimes(100);
            for (int i = 0; i < prime.length; i++) {
                if (prime[i]) System.out.println(i);
            }
            for (int i = 0; i < prime.length; i++) {
                if (i < 10) System.out.print(i);
                if (10 <= i < 100 && int d = prime[i])// ввёл переменную и запросил порядковый номер
                    d = (i / 10) * (i % 10) // заданная перемена равняется произвкедению десятков на единицы
                    System.out.print(d);
                // для периода от 10 до 100, ищу числа произведение цифр которых равномпорядковому номеру
                if (100 <= i < 1000 && int s = prime[i])
                    s = (i / 100) * d//пользуюсь уже известным произведением двузначного числа нахожу трёхзначное
                    System.out.print(s);
                if (1000 <= i < 10000 && int t = prime[i])
                    t = (i / 1000) * s
                System.out.print(t);
                if (10000 <= i < 100000 && int m = prime[i])
                    m = (i / 1000) * t
                System.out.print(m);
                if (100000 <= i < 1000000 && int tt = prime[i])
                    tt = (i / 100) * m
                System.out.print(tt);
                if (10000000 <= i < 100000000 && int mm = prime[i])
                    mm = (i / 100) * tt
                System.out.print(mm);
            }
        }
 
        private static boolean [] getPrimes(int n) {
            boolean[] primes = new boolean[n + 1];
            Arrays.fill(primes, 2, n + 1, true);
            for (int i = 2; i * i <= n; i++) {
                if (primes[i]) {
                    for (int k = i * i; k <= n; k += i) {
                        primes[k] = false;
                    }
                }
            }
            return primes;
        }
}
Добавлено через 3 часа 52 минуты
мне написал один человек с высказывание о том что можно корректировать через функцию IDEA debug. я ей воспользовался и ошибок стало меньше но не на много, что делать дальше, подскажите пожалуйста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.company;
import java.util.Arrays;
public class Main {
        public static void main(String[] args) {
            boolean[] prime = getPrimes(100);
            for (int i = 0; i < prime.length; i++) {
                if (prime[i]) System.out.println(i);
            }
            for (int i = 0; i < prime.length; i++) {
                if (i < 10) System.out.print(i);
                if (10 <= i && i < 100 && int d = prime[i]) {// ввёл переменную и запросил порядковый номер
                    d = (i / 10) * (i % 10); // заданная перемена равняется произвкедению десятков на единицы
                    System.out.print(d);
                }
                // для периода от 10 до 100, ищу числа произведение цифр которых равномпорядковому номеру
                if (100 <= i && i < 1000 && int s = prime[i]){
                    s = (i / 100) * d;//пользуюсь уже известным произведением двузначного числа нахожу трёхзначное
                    System.out.print(s);
                }
                if (1000 <= i && i < 10000 && int t = prime[i]){
                    t = (i / 1000) * s;
                    System.out.print(t);
                }
                if (10000 <= i && i < 100000 && int m = prime[i]){
                    m = (i / 1000) * t;
                    System.out.print(m);
                }
                if (100000 <= i && i < 1000000 && int tt = prime[i]){
                        tt = (i / 100) * m;
                        System.out.print(tt);
                    }
                if (10000000 <= i && i < 100000000 && int mm = prime[i]){
                    mm = (i / 100) * tt;
                    System.out.print(mm);
                }
            }
        }
 
        private static boolean [] getPrimes(int n) {
            boolean[] primes = new boolean[n + 1];
            Arrays.fill(primes, 2, n + 1, true);
            for (int i = 2; i * i <= n; i++) {
                if (primes[i]) {
                    for (int k = i * i; k <= n; k += i) {
                        primes[k] = false;
                    }
                }
            }
            return primes;
        }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2019, 20:58
Ответы с готовыми решениями:

Среди всех 3-хзначных чисел найти те, произведение цифр которых равно N
Помогите решить небольшую задачку: Среди всех трехзначных целых чисел найти те, произведение цифр которых равно N. Можно без массивов?...

Распечатать квадраты всех нечетных чисел от 1 до N, кратных порядковому номеру текущего числа
Распечатать квадраты всех нечетных чисел от 1 до N, кратных порядковому номеру текущего числа.

Есть ли среди чисел в диапазоне от А до В такие, произведение цифр которых равно С?
1. Написать программу на языке С++ для решения задачи: Даны два числа А, В и С. Определить, есть ли среди чисел в диапазоне от А до В...

6
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.11.2019, 11:27
Цитата Сообщение от 7725 Посмотреть сообщение
как правильно поступать в таких ситуациях?
Цитата Сообщение от 7725 Посмотреть сообщение
что делать дальше
Разбить задачу на более мелкие локальные задачи и написать методы, которые их решают.
Как то:
- метод проверки числа на простоту
- метод, возвращающий произведение цифр числа
- метод, возвращающий порядковый номер числа в ряду
- и т.д.

И на основе этих методов написать программу.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
22.11.2019, 12:17
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Ideone
{
    public static int prodDig(int n)
    {
        if (n<10)
           return n;
        else
           return (n%10)*prodDig(n/10);
    }
    
    public static boolean isPrime(int n)
    {
        int i;
        i=2;
        while(i*i<n)
        {
            if ((n%i)==0) return false;
            i++;
        }
        return true;
    }
    
    public static int nextPrime(int n)
    {
        n++;
        while(! isPrime(n))
        {
            n++;
        }
        return n;
    }
 
    public static void main (String[] args) throws java.lang.Exception
    {
        int n=2,k=1,p;
        while(true)
        {
            p=prodDig(n);
            if (p==k) 
            {
                System.out.println(n);
                break;
            }
            n=nextPrime(n);
            k++;
        }
    }
}
Получилось 7547
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.11.2019, 12:19
7725, вот тебе и пример подъехал!
Catstail, респект!
1
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
22.11.2019, 13:17
а моя не выдает этого резулта((. я считаю, что "2" имеет порядковый № 1
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.Set;
import java.util.TreeSet;
 
public class Helper {
 
    public static void main(String[] args) {
        Set<Integer> setPrim = getPrimNums(100000);
        int mult;
        int orderIndexPrimNum = 1;
        for (Integer prim : setPrim) {
            mult = getMult(orderIndexPrimNum);
            if (prim == mult)
                System.out.printf("%d <-> %d\n", prim, orderIndexPrimNum);
            orderIndexPrimNum++;
        }
    }
 
    private static int getMult(int num) {
        int mult = 1;
        while (num != 0) {
            mult *= (num % 10);
            num /= 10;
        }
        return mult;
    }
 
    private static Set<Integer> getPrimNums(int highBorder) {
        Set<Integer> integerSet = new TreeSet<>();
        integerSet.add(2);
        for (int i = 3; i < highBorder; i += 2) {
            if (isNotDiv(integerSet,i))
                integerSet.add(i);
        }
        return integerSet;
    }
 
    private static boolean isNotDiv(Set<Integer> integerSet, int n) {
        for (Integer ssInteger : integerSet)
            if (n % ssInteger == 0)
                return false;
        return true;
    }
}
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
22.11.2019, 14:10
Aviz__, ой, у меня ошибочка... Ответ 17.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Ideone
{
    public static int prodDig(int n)
    {
        if (n<10)
           return n;
        else
           return (n%10)*prodDig(n/10);
    }
    
    public static boolean isPrime(int n)
    {
        int i;
        i=2;
        while(i*i<=n) // вот здесь была ошибка!!!
        {
            if ((n%i)==0) return false;
            i++;
        }
        return true;
    }
    
    public static int nextPrime(int n)
    {
        n++;
        while(! isPrime(n))
        {
            n++;
        }
        return n;
    }
 
    public static void main (String[] args) throws java.lang.Exception
    {
        int n=2,k=1,p;
        while(true)
        {
            p=prodDig(n);
            System.out.println(k+" "+n+" "+p);
            if (p==k) 
            {
                System.out.println(n);
                break;
            }
            n=nextPrime(n);
            k++;
        }
    }
}
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
22.11.2019, 14:51
Лучший ответ Сообщение было отмечено 7725 как решение

Решение

Catstail, и у меня косяк был((
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.Set;
import java.util.TreeSet;
 
public class Helper {
 
    public static void main(String[] args) {
        Set<Integer> setPrim = getPrimNums(1000);
        int orderIndexPrimNum = 1;
        for (Integer prim : setPrim) {
            if (getMult(prim) == orderIndexPrimNum)
                System.out.printf("%d <-> ord %4d\n", prim, orderIndexPrimNum);
            orderIndexPrimNum++;
        }
    }
 
    private static int getMult(int num) {
        int mult = 1;
        while (num != 0) {
            mult *= (num % 10);
            num /= 10;
        }
        return mult;
    }
 
    private static Set<Integer> getPrimNums(int highBorder) {
        Set<Integer> integerSet = new TreeSet<>();
        integerSet.add(2);
        for (int i = 3; i < highBorder; i += 2) {
            if (isNotDiv(integerSet,i))
                integerSet.add(i);
        }
        return integerSet;
    }
 
    private static boolean isNotDiv(Set<Integer> integerSet, int n) {
        for (Integer ssInteger : integerSet)
            if (n % ssInteger == 0)
                return false;
        return true;
    }
}
резулт:
Кликните здесь для просмотра всего текста

17 <-> ord 7
73 <-> ord 21
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2019, 14:51
Помогаю со студенческими работами здесь

Если среди цифр заданного трехзначного числа имеется ноль, то получить квадрат этого числа, в противном случае произведение его цифр (Switch)
Здравствуйте)помогите,пожалуйста, написать программу с оператором switch для задачи: если среди цифр заданного трехзначного числа...

Поиск всех двухзначных чисел, произведение цифр которых равно 18 (Prolog 8)
Доброго времени суток, прошу помощи с поиском всех двухзначных чисел, произведение цифр которых равно 18. От Пролога и его синтаксиса очень...

Вывод бита числа по его порядковому номеру
нужна вот такая программка!((( вводится число и номер бита, вывести какой это бит (0 или1)

Среди заданных чисел найти произведение всех нечетных цифр
Среди заданных чисел найти произведение всех нечетных цифр. Если таких цифр нет - вернуть 1. Написать программу при помощи цикла со...

Сделать функцию, которая по порядковому номеру числа Фибоначчи возвращает его значение
Сделать функцию, которая по порядковому номеру числа Фибоначчи возвращает его значение С++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru