反转for循环...想要反向打印数字

时间:2010-04-29 16:59:43

标签: c++ loops for-loop

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

开始
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;

}

2 个答案:

答案 0 :(得分:12)

您可以按如下方式反转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;
}

答案 1 :(得分:1)

只需反转外部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;
}