如何更改此循环以反向打印素数...从最大的第一个
开始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;
}
答案 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;
}