3、分解质因数

3、题目:分解质因数

:输入一个整数x,按x = axbxcx…的格式输出,其中a、b、c等均为将x分解所得到的因数,并要求a、b、c等均为质数。

#include <stdio.h>
int isPrime (int x);
int main(){
	int x, k;
	scanf("%d", &x);
	
	//输入1的话,输出也是正确的
	printf("%d=", x);
	if( isPrime(x) == 1){
		printf("%d", x);
	}else {
		for (k=2; k<=x; k++){     
			while( x!=1){
				if(x%k ==0){
					printf("%d", k);
					x /=k;
				} else {
					break;
				}
				if(x!=1)
				printf("x"); 
			}
		}
	}
	return 0;
} 

int isPrime (int x){
	int i, k, ret=1;
	k = sqrt(x);			//******将sqrt(x)赋给k,而不用i<=sqrt(x),这样可以只调用一次sqrt()******
	for( i=2; i<=k; i++){   //******要用<=,如x=4,k=sqrt(x)=2,判据是i<k,则进不去循环从而判定4为素数******
		if(x%i ==0){
			ret=0;
			break;
		}
	}
	return ret;
}

由以上代码可知:之所以说是质因数(即分解所得因数都是质数),是因为:比如,不能被2、3整除的x,肯定不能被4、6等整除,即能整除x的数肯定不是除1以外的 某个数的 倍数,能整除x的数肯定是1与素数(任意素数都不是1和自身以外的某个数的倍数)。但1不是素数,故为质因数。

此外,注释中带星号部分为注意事项。

发布了16 篇原创文章 · 获赞 0 · 访问量 332

猜你喜欢

转载自blog.csdn.net/NAU_LHT/article/details/104144672