约数个数
请编写程序实现以下功能。
(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); }