C语言整数的素数因子分解

整数的素数因子分解
给定某个正整数 N,求其素因子分解结果
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即

N=p1^k1*p2^k2**pm^km

其中pi为素因子并要求由小到大输出,
指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。

输入样例:

2350

输出样例:

2350=2*5^2*47

C语言完整代码如下:

#include
#include
int main() {
	long int m;
	while(scanf("%ld",&m)!=EOF) {
		int a[1000];
		int b[100];
		long int i;
		int j,n;
		if(m==1) {
			printf("1=1\n");
		} else {
			printf("%ld=",m);
			int k=0;
			for(i=2; i<=m; i++) {
				n=sqrt(i);
//				对每一个数 i 分解它的素数 
				while(m%i==0) {
					for(j=2; j<n; j++) {
						if(i%j==0) {
							break;
						}
					}
					if(j>=n) {
//						i为素数,则保存到数组中
						a[k]=i;
						k++;
					}
					m=m/i;
				}
			}
			int x;
			for(i=0; i<k; i++) {
				x=0;
//				统计重复出现的数字的次数
				for(j=i; j<k; j++) {
					if(a[i]==a[j])
						x++;
				}
//				跳过已统计过的
				i=i+x-1;
//				格式要求,如果未到末尾
				if(i!=k-1) {
					if(x==1) {
						printf("%d*",a[i]);
					} else {
						printf("%d^%d*",a[i],x);
					}
//				到了末尾则换行输出 
				} else {
					if(x==1)
						printf("%d\n",a[i]);
					else
						printf("%d^%d\n",a[i],x);
				}
			}
		}
	}
	return 0;
}

你可能感兴趣的:(C)