Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Br3dm4n
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 5
1

Цикл: Найти количество чисел из диапазона от 100000 до 999999, у которых произведение первых 3 разрядов равно произведению 3 последних.

07.10.2013, 01:25. Просмотров 1539. Ответов 8
Метки нет (Все метки)

Найти количество чисел из диапазона от 100000 до 999999, у которых произведение первых 3 разрядов равно произведению 3 последних. Сколько среди них простых чисел?
Нужно сделать ее в "console application" (delphi)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 01:25
Ответы с готовыми решениями:

Найти все пары чисел, для которых их сумма равна их произведению и количество таких пар
может есть какие-нибудь другие варианты? procedure TForm1.Button1Click(Sender:...

Найти количество комбинаций, в которых сумма квадратов разрядов минут равна сумме квадратов разрядов секунд
.Секундомер отмерял 6458 секунд. Найти количество комбинаций, в которых сумма...

Выяснить, равно ли произведение двух первых цифр числа произведению двух последних
дано натуральное число n, количество цифр в котором больше 5. выяснить, равно...

Выяснить,равно ли произведение двух первых цифр 4-х значного числа произведению 2х последних цифр
дано натуральное число N,количество цифр в котором не менее...

Найти количество шестизначных билетов у которых сумма первых 3 десятичных цифр равно сумме трех последних десятичных цифр
3) дданы целые положительные M и N (100000<=M<= N) найти колличество билетов с...

8
dondublon
2146 / 1064 / 213
Регистрация: 17.03.2012
Сообщений: 6,417
Записей в блоге: 5
07.10.2013, 09:02 2
Пусть каждое возможное произведение М (от 0*0*0 до 9*9*9) получается из n вариантов произведений-троек.
Тогда на каждое М приходится n^2 шестизначных чисел, удовлетворяющих данному условию.
Поясняю. М получается n вариантами. На каждое из n чисел, у которого первые три цифры в произведении дают M, приходится n чисел, у которого 3 последних дают M.
Это если без учета того, что первая цифра у нас начинается с единицы, а не с нуля. С учётом получился следующее (обратите внимание на единичку в цикле по n1):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    for n1 := 1 to 9 do
        for n2 := 0 to 9 do
            for n3 := 0 to 9 do
            begin
                mult := n1*n2*n3;
                inc(counter1[mult]);
            end;
 
    for n1 := 0 to 9 do
        for n2 := 0 to 9 do
            for n3 := 0 to 9 do
            begin
                mult := n1*n2*n3;
                inc(counter[mult]);
            end;
 
    tmp := 0;
    for i := 0 to 1000 do
    begin
        tmp := tmp + counter[i] * counter1[i];
        Writeln(i, ' ', counter[i]);
    end;
    Writeln('total ', tmp);
где
Delphi
1
2
3
4
5
6
var
    n1, n2, n3: Byte;
    counter, counter1: array [0..1000] of Integer;
    mult: Integer;
    tmp: Integer;
    i: Integer;
Мне кажется, что это будет самый быстрый способ, хотя 100% гарантии дать не могу.
В простыми числами сложнее, думать надо.
1
Br3dm4n
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 5
07.10.2013, 09:33  [ТС] 3
ОГРОМНО СПАСИБО!
0
dondublon
2146 / 1064 / 213
Регистрация: 17.03.2012
Сообщений: 6,417
Записей в блоге: 5
07.10.2013, 09:44 4
Пожалста.
Насчет простых чисел - самый лучшй способ, это просто раздобыть где-нибудь список простых чисел, и подсчитать, сколько их там, в нужном диапазоне.

Добавлено через 4 минуты
Вот тут http://blog.sjinks.pro/c-cpp/109-primes-from-two-to-million/ скачал список.
Простых чисел до миллиона 78498, минус 9592, которые до 100 000, = *68906*.
Программа, оптимальная по скорости:
Delphi
1
Writeln(68906);
Добавлено через 3 минуты
А, не, там же надо те, которые по условию... Ну всё равно, подход ясен.
Главное - не определять простоту числа самому.
0
Cyborg Drone
Модератор
5296 / 3175 / 2442
Регистрация: 17.08.2012
Сообщений: 10,189
07.10.2013, 10:02 5
Цитата Сообщение от dondublon Посмотреть сообщение
Мне кажется, что это будет самый быстрый способ, хотя 100% гарантии дать не могу.
Да, может быть, самый быстрый... 2900 выполнений тела цикла всего-то... Хотя... Сдаётся мне, что Br3dm4n изучает в данный момент деление нацело и взятие остатка от деления... И программа Ваша для него не совсем сдача зачёта... К тому же, у Вас
Цитата Сообщение от dondublon Посмотреть сообщение
Delphi
1
    counter, counter1: array [0..1000] of Integer;
Что ж, возможно, самый быстрый способ. Однако, не самый короткий. Ещё здесь у Вас вкралась несущественная неточность: 9 * 9 * 9 = 729, поэтому достаточно было бы
Delphi
1
2
3
4
5
{...}
    counter, counter1: array [0..729] of Integer;
{...}
    for i := 0 to 729 do
{...}
Мой вариант под консоль:
Delphi
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
program m_lucky;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var i, k: integer;
 
function m3(x: integer): integer;
 
var n: integer;
 
begin
  result := 1;
  for n := 1 to 3 do
    begin
      result := result * (x mod 10);
      x := x div 10
    end;
end;
 
begin
  k := 0;
  for i := 100000 to 999999 do if m3(i mod 1000) = m3(i div 1000) then k := k + 1;
  writeln('Quantity of numbers: ', k);
  readln
end.
0
dondublon
2146 / 1064 / 213
Регистрация: 17.03.2012
Сообщений: 6,417
Записей в блоге: 5
07.10.2013, 10:11 6
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Да, может быть, самый быстрый... 2900 выполнений тела цикла всего-то...
Я чет не понял, это сарказм чтоле?

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
К тому же, у Вас
Сообщение от dondublon
Код Delphi
1
* * counter, counter1: array [0..1000] of Integer;
Живу на широкую ногу, чо
0
Cyborg Drone
Модератор
5296 / 3175 / 2442
Регистрация: 17.08.2012
Сообщений: 10,189
07.10.2013, 10:35 7
Ой. позабыл про простые... Ну тогда так:
Delphi
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
program lucky;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var i, k, s: integer;
 
function m3(x: integer): integer;
var i: integer;
begin
  Result := 1;
  for i := 1 to 3 do
    begin
      Result := Result * (x mod 10);
      x := x div 10
    end;
end;
 
function simple(N: integer): boolean;
var i: integer;
begin
if n < 2
  then Result := False
  else begin
    Result := True;
    for i:=2 to trunc(sqrt(N)) do
    if N mod i = 0
      then begin
        Result := False;
        exit;
      end;
  end;
end;
 
begin
  k := 0;
  s := 0;
  for i := 100000 to 999999 do
      if m3(i mod 1000) = m3(i div 1000) then
        begin
          k := k + 1;
          if simple(i) then s := s + 1;
        end;
  writeln('Quantity of numbers (i mod 1000 = i div 1000) of i in [100000...999999]: ', k);
  writeln('Including simple numbers: ', s);
  readln
end.
Добавлено через 11 минут

Не по теме:

Цитата Сообщение от dondublon Посмотреть сообщение
Я чет не понял, это сарказм чтоле?
Вовсе нет. Итераций цикла будет:
первые 3 for: 10 * 10 * 9 = 900
вторые 3 for: 10 * 10 * 10 = 1000
последний for: 1001 (вот, блин, ошибся: цикл от нуля!)
всего: 2901, что по сравнению с количеством выполнения цикла в моей программе (считать не буду, но где-то между 899999 и 854099051) значительно меньше. На два порядка точно. И где ж Вы видите сарказм? Вообще-то, получается, тут надо мной изгаляться надо...

0
dondublon
2146 / 1064 / 213
Регистрация: 17.03.2012
Сообщений: 6,417
Записей в блоге: 5
07.10.2013, 11:05 8
Ну тогда ладно.
Правда, в мой способ, кажется, невозможно засунуть проверку на простоту.
Если делать с простыми, тут реально надо думать, вариантов много.
0
Cyborg Drone
Модератор
5296 / 3175 / 2442
Регистрация: 17.08.2012
Сообщений: 10,189
07.10.2013, 11:13 9
Цитата Сообщение от dondublon Посмотреть сообщение
Правда, в мой способ, кажется, невозможно засунуть проверку на простоту.
Да... Что-то тоже не соображу, как...
0
07.10.2013, 11:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 11:13

К произведению первых 5 чисел прибавить сумму 10 последних элементов массива
Дан массив и 12 целых чисел. К произведению первых 5 чисел прибавить сумму 10...

Найти количество N-значных чисел, у которых сумма цифр равна их произведению
Найти количество N- значных чисел , у которых сумма цифр равна их произведению...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru