我在PAscal中遇到了问题。我想计算素数,但没有结果: 我的代码是:
Program arrayToFunction;
const
size = 5;
type
a = array [1..size] of integer;
var
aNumbers: a = (1, 7, 3, 4, 5);
iCountNumbers: integer;
function countPrimeNumbers( var arr: a) : integer;
var
i :0..size;
sum,j,count: integer;
begin
sum := 0;count:=0;
for i := 0 to size do
begin
for j := 2 to arr[i] do
begin
if(arr[i] mod j = 0) then sum:=1;
end;
if(sum=0) then count:=count+1;
end;
countPrimeNumbers := count;
end;
begin
iCountNumbers := countPrimeNumbers( aNumbers ) ;*)
writeln( 'Numbers: ', iCountNumbers);
readln;
end.
对于这个数组,我想得到3但我得到2 ...我不明白我的问题在哪里。请帮帮我
答案 0 :(得分:4)
您有type a = array [1..size] of integer;
,但随后使用for i := 0 to size
迭代数组。下标需要与声明的范围相匹配。
在进入该循环之前设置sum := 0;
,但不要再将其设置为零。一旦找到非素数,您就会设置sum := 1;
,并且它会保留。一旦你检测到非素数,你就永远不会发现素数。
您找到的两个素数是arr[0]
处的垃圾和arr[1]
处的1。请注意, 1 不是素数,但您的代码将结束它。 7 是一个素数,但你的代码会认为它不是,因为它最终会注意到它本身可以被整除。