我声明然后将'n'分配给变量'm'和'num'。当他们到达计划结束时,他们最终为零。
这个程序可以找到n的Phi Totient函数。这一切都完美无缺,直到最后一次循环。
int factorization(int n)
{
int i, j=0, a[14], index=0, m, num;
m=n;
num=n;
for(i=2; i<sqrt(n)+1; i++)
{
if(n%i == 0)
{
n=n/i;
if(a[0]!=i && a[1]!=i && a[2]!=i && a[3]!=i && a[4]!=i && a[5]!=i && a[6]!=i && a[! =i && a[8]!=i && a[9]!=i && a[10]!=i && a[11]!=i && a[12]!=i && a[13]!=i && a[14]!=i)
{
a[index]=i;
index++;
}
i=1;
}
}
a[index]=n;
for (i=index+1; i<=14; i++)
{
a[i]=0;
}
for (i=0; i<=10; i++)
{
printf("%d\n",a[i]);
}
while(a[j] != 0 && a[j] != 1)
{
m=m*((a[j]-1)/a[j]);
j++;
}
printf("Phi of %d = %d", num, m);
return 0;
}
答案 0 :(得分:0)
int i, j=0, a[14], index=0, m, num;
a
数组未初始化但读入数组元素:
if(a[0]!=i && a[1]!=i && a[2]!=i && a[3]!=i && a[4]!=i && a[5]!=i && a[6]!=i && a[! =i && a[8]!=i && a[9]!=i && a[10]!=i && a[11]!=i && a[12]!=i && a[13]!=i && a[14]!=i)
在上述行中,您正在测试a[14]!=i
,但a
的最后一个元素是a[13]
。 a[14]
不属于数组。
同样在:
for (i=index+1; i<=14; i++)
{
a[i]=0;
}
您正在访问数组外的元素(a[14]
)。
答案 1 :(得分:0)
将 m 更改为 double 并循环至
while (a[j] != 0 && a[j] != 1)
{
m = m * ( ((double)a[j] - 1.0) / (double)a[j] );
j++;
}
如果m为整数,则除以
((a[j]-1)/a[j])
小于1,向下舍入为零,乘法变为
m = m * 0