[存档!]纯数学、物理学、化学等:与贸易没有任何关系的大脑训练问题 - 页 428

 
Mathemat:

短语B是什么意思?他如何事先知道A在得到总和时不会猜出数字?这其实是一个非常简洁的答案,它几乎包含了所有关于数字的信息


如果第一个学者被告知两个质数的乘积,他就会立即找到答案。
 

这很明显。最主要的是破译对话的第二条评论。

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

 
ValS:

你认为会有什么变化吗?


彻底的。看。

写出所有大于1的数对的可能组合,其总和为
即小于一百(有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);
}
//+------------------------------------------------------------------+

现在让我们把这个脚本扔到图表上,我们会看到什么?总和小于100的对子数量=4656。

 
ValS:

如果第一个学者被告知两个质数的乘积,他就会立即找到答案。

是的,但不确定他是否会被抓住说他这么快就找到了。
 
什么是 "发现"?也许最好的办法是假设他们说的是实话。
 
drknn:


根部。看。

如果你能想到两个相同的数字,那么配对的数量就会变得更大。让我们检查一下。

现在让我们把这个脚本扔到图表上,我们会看到什么?总和小于100的对子数量=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--)