c语言求一个数的所有约数

Python030

c语言求一个数的所有约数,第1张

#include<stdio.h>

int main(void)

{

float num

int ture,ture2

int n=2

int i=0

int j,a[10]

while(scanf("%f",&num)==1)

{

  n=2

  i=0

  if((int)num==num)

  {

  ture=(int)num

  ture2=ture/2

  while(n<=ture2)

  {

  if(ture%n==0)

  {

  ture = ture/n

  if (i==0 || (i>0 && a[i-1]<n))

  {

  a[i++]=n

  }   

  }

  else

  {

  n++

  }

  

  }

  if(i==0)

  printf("%d是素数\n",ture)

  else

  {

  for(j=0j<ij++)

  printf("%d ",a[j])

  printf("\n")

  }

  }

  else

  printf("小数\n")

  getchar()

 }

 printf("非数字\n")

  

  return 0

}

我觉得逻辑上有点问题,帮你改了一下

运行结果如下:

你是想求该数的约数的和,就是你的程序,但要{}去掉,如下

scanf("%d",&q)

for(i=1i<=qi++)

{if(q%i==0)

sum=sum+i}

printf("%d",sum)

如想输出该数所以的约数和所有约数的和,程序如下:

scanf("%d",&q)

for(i=1i<=qi++)

{

if(q%i==0)

{

sum=sum+i

printf("%d",i)

}

}

printf("\n")

printf("%d",sum)

对于这个问题我们只需要暴力从2到根号n这个闭区间的所有整数就行了,如果能整除计数就加2,不过如果这个整数的平方就是输入的n则计数只能加1。最后不要忘记1和其自身。如果根号n不是一个整数,那么我们可以向下取整。算法的整体复杂度是根号n,这个算法的时间消耗与根号n成正比,不过可以确定的是n在32位的整型(或者无符号的整型)数据范围内时间消耗还是比较乐观的。参考代码(C语言实现):

#include

<stdio.h>

#include

<math.h>

int

main(void)

{

int

i

int

n

int

m

int

num

scanf("%d",

&n)

num

=

0

m

=

sqrt(n)

for

(i=2

i<=m

++i)

{

if

(n

%

i

==

0)

{

num

+=

2

if

(i

*

i

==

n)

{

--num

}

}

}

/*自然数1应该只有一个因子才对*/

if

(n

!=

1)

{

num

+=

2

}

else

{

++num

}

printf("%d\n",

num)

return

0

}