约数个数
请编写程序实现以下功能。
(1)从键盘任意输入一个正整数(假设不超过9999),请对该数进行质因数分解。
如输入24,它的质因数分解结果为2*2*2*3,即
2
3
*3
1
;
再如输入90,它的质因数分解结果为2*3*3*5,即
2
1
*3
2
*5
1
。
(2)请使用上述质因数的分解结果,计算正整数的约数个数。
计算的方法为:
- 将每个质因数的幂加1后相乘,(3+1)*(1+1)=8,即24的约数有8个。
- 再以90为例: 90=2 1 *3 2 *5 1 ,(1+1)*(2+1)*(1+1)=12,于是90共有12个约数
键盘输入:90
屏幕输出:
质因数分解结果为:2^1*3^2*5^1
约数个数为:12
(注: x^y 表示 x的y次方,本括号内的内容不用输出。)
#include<stdio.h>
#include<math.h>
struct node
{
int yue;
int num;
};
int fenjie(struct node shuzi[100],int x)
{
int i1,i2,j=0,n1=0,n2=0;
for (i1=2;i1<x/2;i1++)
{
if (x%i1==0)
{
n1=n1+1;
if (n1==1)
{
shuzi[j].yue=i1;
j=j+1;
}
else
{
for (i2=0;i2<j;i2++)
{
if (i1%shuzi[i2].yue==0)
break;
else
n2=n2+1;
}
if (n2==j)
{
shuzi[j].yue=i1;
j=j+1;
n2=0;
}
}
}
}
for (i1=0;i1<j;i1++)
{
for (i2=1; ;i2++)
{
if (x%(int)pow(shuzi[i1].yue,i2)!=0)
break;
}
shuzi[i1].num=i2-1;
}
return (j);
}
int cal(struct node shuzi[100],int n)
{
int number=1,i;
for (i=0;i<n;i++)
number=number*(shuzi[i].num+1);
return (number);
}
void main()
{
struct node shuzi[100];
int x,number,n,i;
scanf("%d",&x);
n=fenjie(shuzi,x);
printf("质因数分解结果为:\n");
for (i=0;i<n;i++)
{
printf("%d^%d",shuzi[i].yue,shuzi[i].num);
if (i!=n-1)
printf("*");
}
printf("\n");
number=cal(shuzi,n);
printf("约数个数为: %d\n",number);
}
