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不是素数,故为质因数。
此外,注释中带星号部分为注意事项。