我正在尝试解决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;
}
答案 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;
}
请更改您的功能并避免使用数组