[Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей - страница 428

 
Mathemat:

Что означает фраза Б? Откуда он, получив сумму, заранее знает, что А числа не угадает? Это очень емкий ответ на самом деле, в нем почти вся инфа о числах!


Если бы первому мудрещу сообщили произведение двух простых чисел, то он бы сразу нашел ответ.
 

Это очевидно. Главное - расшифровать второй коммент диалога.

любое разложение суммы, сообщенной Б, на два слагаемых приводит к тому, что хотя бы одно из слагаемых содержит два множителя.

 
ValS:

Полагаешь, что что-то изменится?


Коренным образом. Смотри.

Выписываем все возможноные комбинации пар чисел больше единицы, сумма
которых меньше ста (таких пар 2401).

Если можно задумать два одинаковых числа, то количество пар становится куда больше. Проверяем:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start(){
  int SchPar=0;
  for(int i=100;i>=2;i--){
    for(int ii=100;ii>=2;ii--){
      if(i+ii<100){
        SchPar++;
      }
    }
  }
  Alert("Общее число пар чисел, сумма которых менее 100 = ",SchPar);
  return(0);
}
//+------------------------------------------------------------------+

Теперь кидаем этот скрипт на график и что мы видим? Число пар, сумма которых менее ста = 4656.

 
ValS:

Если бы первому мудрещу сообщили произведение двух простых чисел, то он бы сразу нашел ответ.

Да, но не факт, что он спалился бы, сказав что отыскал так быстро нужное.
 
Что такое "спалился"? Наверно, лучше предполагать, что они говорят правду.
 
drknn:


Коренным образом. Смотри.

Если можно задумать два одинаковых числа, то количество пар становится куда больше. Проверяем:

Теперь кидаем этот скрипт на график и что мы видим? Число пар, сумма которых менее ста = 4656.


for(int ii=100;ii>=2;ii--) - тут надо не так,

а вот так

for(int ii=i-1;ii>=2;ii--)

 
Ну выдал бы себя. Выдал бы неосторожным словом.
 
ValS:


for(int ii=100;ii>=2;ii--) - тут надо не так,

а вот так

for(int ii=i-1;ii>=2;ii--)


Нет - так мы ни когда не переберём сочетание двух одинаковых чисел, так как второе всегда будет на 1 меньше.
 

Мы исходим из того, что есть.

А в цикле пары чисел дублировать не стоит.

 

Ну тогда попробуй так

for(int ii=i;ii>=2;ii--)

Причина обращения: