【问题标题】:Reversing a for loop... want to print numbers in reverse反转 for 循环...想要反向打印数字
【发布时间】:2010-04-29 16:59:43
【问题描述】:

如何更改此循环以反向打印素数...从最大的第一个开始

int main(){

    bool prime;
    for( int i=3; i<=10000; i++){
        prime = true;
        for(int n=2; n<=i-1; n++){
            if( i%n == 0){
                prime = false;
            }
        }
        if(prime){
            cout << i << " ";
        }
    }
    return 0;

}

【问题讨论】:

  • 请注意,反向操作会阻止编写 Eratosthenes 筛,这样会更快。
  • 不,它没有——他可以按顺序找到它们并反过来打印它们。小于 10000 的素数可以很容易地放入堆栈。
  • 取决于你所说的“去”是什么意思。它将 Sieve 变成 2-pass 算法,但不会影响存储需求。
  • 如果你可以写"for (int i=3; i

标签: c++ loops for-loop


【解决方案1】:

你可以按如下方式反转for循环:

for( int i=10000; i>=3; i--) {

话虽如此 - 您也可以简化这一点。您只需要检查直到达到数字的平方根。还要确保,当你发现一个数字不是质数时,你会立即爆发:

int main() {

    bool prime;
    for( int i=10000; i>=3; i--) {
        prime = true;
        int max = sqrt(i)+1; // Don't check beyond this...
        for(int n=2; n<=max; n++)
        {
            if( i%n == 0){
                prime = false;
                break; // This prevents you from continually checking!
            }
        }
        if(prime){
            cout << i << " ";
        }
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    只需反转外部for循环的方向即可。

    int main()
    {
        bool prime;
        for( int i=10000; i>=3; --i)
        {
            prime = true;
            for(int n=2; n<=i-1; n++)
            {
                if( i%n == 0)
                {
                    prime = false;
                }
            }
            if(prime)
            {
                cout << i << " ";
            }
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多