pat 1059(patients)
1、题目链接
https://patest.cn/contests/pat-a-practise/1059
2、题意分析
(1)题意:给出一个数字,求出该数的的所有素数因子,并且按照一定的格式输出
(2)写一个判断是否为素数的函数isPrime();从2到sqrt(number)遍历,观察是否可以整除,是否为素数。
(3)注意输出格式
3、源代码
#include
#include
#define size 100000
/*
1.因子被找到的顺序总是从小到大
*/
bool isPrime(int number){
int i;
for(i = 2;i <= sqrt(number);i++){
if(number % i == 0 ){//如果说能够除尽
return false;//跳出循环
}
}
return true;
}
int main(){
int number;
scanf("%d",&number);
int i ;
int array[size]={0};//数组array[]用来存储素数因子,大小表示为指数
int tempNum = number;
int compare = 0 , count = 0;
bool primeFlag = true;//默认为素数
for(i = 2;i <= sqrt(tempNum) ;i++){
if(number % i == 0 && isPrime(i)){//能够被除尽,并且为素数
primeFlag = false;
if(compare != i){
count++;//表示有多个素数因子
compare = i;
}
array[i] ++ ;//表示有数
number /= i;
i--;//可能还会被当前数再整除
}
}
printf("%d=",tempNum);
if(primeFlag){
printf("%d",tempNum);
return 0;
}
int j = 0;
for(j = 2;j0){
count --;
if(array[j]>1){
printf("%d^%d",j,array[j]);
}
else
printf("%d",j);
if(count!=0){
printf("*");
}
}
}
}
/*
64
97532468
*/4、坑点
(1)注意素数表示,例如:5=5;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~