素数练习 - 循环问题C ++

时间:2015-07-08 12:11:10

标签: c++ for-loop visual-studio-2015

我正在尝试解决Stroustrup的书中关于计算和打印的练习,如果1到100之间的数字是否为素数。

我的代码似乎工作得很好但是,当它在屏幕上打印值时,它从6开始而不是从2开始。

我试图找出原因,但我无法理解其原因。

你可以伸出援助之手吗?

非常感谢!

 // Prime Numbers.cpp : definisce il punto di ingresso dell'applicazione console.
//

#include "stdafx.h"
#include "std_lib_facilities.h"

vector<int> primes = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 };

int primecheck(int x) {

    for (int i : primes) {
        if (x <= primes[i])
            break;
        if (primes[i] == x)
            return 1;
        while (x % primes[i] != 0) {
            --i;
            if (i < 0) {
                return 1;
                break;
            }
            else {
                if (x % primes[i] == 0)
                return 2;
            }
        }
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    for (int i = 1; i <= 100; ++i) {
        if (primecheck(i) == 1) {
            cout << i << " is a Prime Number." << endl;
        }
        else {
            if (primecheck(i) == 2) {
                cout << i << " is not a Prime Number." << endl;
            }
        }
    }

    keep_window_open();

    return 0;
}

3 个答案:

答案 0 :(得分:1)

for (int i : primes)for(int i = 0;i < terminating condition; ++i)不同。

您可以将for(int i : primes)视为&#34;对于容器int i中的每个primes,请执行某些操作。&#34;和for(int i = 0; i < terminating condition; ++i)为&# 34;对于每个int i到终止条件,做一些事情&#34;

试试这个循环:

for (int i : primes) {
    if (x <= i)
        break;
    if (i == x)
        return 1;
    while (x % i != 0) {
        --i;
        if (i < 0) {
            return 1;
            break;
        }
        else {
            if (x % i == 0)
            return 2;
        }
    }
}

答案 1 :(得分:0)

您的代码非常错误,您应该重写它。 并非所有路径都有return语句,您必须使用i而不是prime [i]

有简单的工作代码:

int primecheck(int x) {

    for (int prime : primes) {
       if (x < prime) {
          return 2;
      }else if (x == prime) {
        return 1;
    }

    return 2;
}

答案 2 :(得分:-1)

int primecheck(int x) {
   int flag=1;
   for (int i =2;i<x;i++) 
   {
     if(x%i)
       flag=2;   
   }
   return flag;
}

请更改您的功能并避免使用数组