如何在指定的时间间隔内找到数字的除数?

Posted

技术标签:

【中文标题】如何在指定的时间间隔内找到数字的除数?【英文标题】:How to find divisors of number on specified interval? 【发布时间】:2016-03-01 15:59:25 【问题描述】:

我想用 WHILE 循环编写一个简单的程序,通过它你可以得到你输入的数字的所有除数。

例如,您想要数字 30 的所有除数,它们是:1、2、3、5、6、10、15、30。 现在您希望程序仅显示区间(例如)从 5 到 10 的数字,即 5、6 和 10。

到目前为止,我尝试的是让所有除数都使用 FOR 语句,但没有间隔,所以我被卡住了,不知道如何在 WHILE 循环中也能做到这一点。

#include <iostream>
using namespace std;

int main() 
int input_number;

cin >> input_number;
cout << "All numbers are " << input_number << endl;

for (int i = 1; i <= input_number; i++) 
    if (input_number % i == 0) 
        cout << i << " ";
    

return 0;

另外感谢您的帮助。

【问题讨论】:

添加另一个 if 语句并检查 i 是否在过滤器的范围内。 @NathanOliver 是的,我也想通了,但问题是我不知道如何将整个东西重新制作为 while 循环。 那么你尝试了什么?我的while循环和for循环基本上是一样的,你只需要自己处理循环变量。 @NathanOliver 我什至不知道如何开始。我知道 while 循环是什么样子,但不知道 for 条件和语句是什么。 a for 循环不必从 1input_number 使用局部变量更改它们,for/while 循环的条件将自动来 【参考方案1】:

while 循环中解决这个问题可能不像在for 循环中解决它那么简单(或蛮力)。

考虑使用while 对循环的这种再现:

int input_number;

std::cin >> input_number;

int i = 1; //Start trying to divide the input number by 1
int limit = input_number; //Termination condition for the loop
while(i < limit) 
  if(input_number % i == 0)  //If divisible by i, both i and input_number/i are factors
    std::cout << i << " " << input_number / i << " ";
  
  ++i; //Try dividing by the next integer
  /*Set the limit to our latest input_number/i so we don't get duplicate 
    results (e.g. (5, 6) and (6, 5) for input_number = 30)*/
  limit = input_number / i;

对于input_number = 30,这个循环只运行5次迭代,而for循环版本运行30次迭代。

底线

for 循环和while 循环可以互换,但使用for 循环解决问题可能比使用while 循环解决问题更快,反之亦然,因为它们可以帮助您从不同的角度思考问题。

额外信息

for 循环版本允许某些优化技术,例如并行累加器,这在while 循环版本中是不可能的,因为每次迭代都依赖于前一次。

【讨论】:

【参考方案2】:

为什么要以while 循环的形式执行此操作? for 绝对是这里循环的正确选择。检查所有除数通过以下方式非常清楚地完成:

for (int i = 1; i <= input_number; i++)  ... 

如果你想添加一个更窄的窗口,你可以改变循环的边界:

for (int i = lower_bound; i <= upper_bound; i++)  ... 

将其转换为 while 循环只需将这些语句解包为:

int i = lower_bound;
while (i <= upper_bound) 
    ...
    i++;

但这更容易出错 - 如果你的循环体中有 continuei 将不会增加。

【讨论】:

好吧,我想使用 for 和 while 循环来制作该程序,因为我是编程新手,想看看代码的不同之处,但我一直坚持将 for 转换为 while lopp。跨度>

以上是关于如何在指定的时间间隔内找到数字的除数?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 PyQt5 Qtimer 在指定的时间间隔内更新?

在指定的时间间隔内切换两次

如何修改Fiori Launchpad里Tile计数调用的时间间隔

在 Scheme 中,我如何将一个精确的(有理的)数字分成被除数和除数?

如果我有 X 的素数分解,如何有效地获得 X 的所有除数? [关闭]

怎样用JAVA实现在指定的时间间隔内重复做一个操作