我可以成功地朗姆酒一个简单的程序来检查数字是否在 C 中。代码如下所示
void isPrime(int n)
{
int a=0,i;
for(i=1;i<=n;i++)
{
if(n%i==0)
a++;
}
if(a==2)
{
printf("\n%d is prime",n);
}
else
{
printf("\n%d is not prime",n);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=2;i<=20;i++)
{
isPrime(i);
}
return 0;
}
以上代码在我编译时运行完美。我是 python 的初学者,我已经将相同的代码转换为 python,看起来像这样。
def isPrime(n):
a=0
for x in range(1,n):
if n%x==0:
a=a+1
if a==2:
print("{} is prime".format(n))
else:
print("{} is not prime".format(n))
for n in range(2,20):
isPrime(n)
但是我在 python 中得到了错误的输出。输出有点奇怪,上面写着
2 is not prime
3 is not prime
4 is prime
5 is not prime
6 is not prime
7 is not prime
8 is not prime
9 is prime
10 is not prime
11 is not prime
12 is not prime
13 is not prime
14 is not prime
15 is not prime
16 is not prime
17 is not prime
18 is not prime
19 is not prime
我发现“a”的计数比所需的实际计数少 1。例如,在 n=8 的情况下,a 应该是 4。但它被算作 3。 可能是什么原因?
请您参考如下方法:
为什么不添加一些 print 语句,这样您就可以看到代码哪里出错了?添加一些打印应该是调试时的第一 react 。
def isPrime(n):
a=0
for x in range(1,n):
print('x,a', x,a)
if n%x==0:
print('incrementing a...')
a=a+1
print('a after loop:', a)
if a==2:
print("{} is prime".format(n))
else:
print("{} is not prime".format(n))
isPrime(2) 的输出:
x,a 1 0
incrementing a...
a after loop: 1
2 is not prime
isPrime(7) 的输出:
x,a 1 0
incrementing a...
x,a 2 1
x,a 3 1
x,a 4 1
x,a 5 1
x,a 6 1
a after loop: 1
7 is not prime
如您所见,a 永远不会是 2,因为 n%n 测试永远不会执行,因为 x in range(1,n),x 的最后一个值为 n-1。但是,如果将 range 更改为 range(1,n+1),将进行测试:
x,a 1 0
incrementing a...
x,a 2 1
x,a 3 1
x,a 4 1
x,a 5 1
x,a 6 1
x,a 7 1
incrementing a...
a after loop: 2
7 is prime
