给定某个正整数N,求其素因子分解结果,即给出其因式分解表达式 N = p1^k1 * p2^k2 *…*pm ^km。
输入格式说明:
输入long int范围内的正整数N。
输出格式说明:
按给定格式输出N的素因式分解表达式,即 N = p1^k1 * p2^k2 *…*pm ^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki==1即因子pi只有一个时不输出ki。
样例输入与输出:
序号 | 输入 | 输出 |
1 | 1024 | 1024=2^10 |
2 | 1323 | 1323=3^3*7^2 |
3 | 97532468 | 97532468=2^2*11*17*101*1291 |
4 | 1 | 1=1 |
5 | 3 | 3=3 |
#include <stdio.h>
int isPrime(long n);
int main(int argc, char *argv[])
{
int N,i,j,M;
scanf("%d",&N);
M=N;
int data[100][2];这里投机取巧,不应该这么干的
if(isPrime(N)){
printf("%d=%d\n",N,N);
}else{
j=0;
for(i=0;i<100;i++){
data[i][0]=0;
data[i][1]=0;
}
while(isPrime(N)==0){
for(i=2;i<=N/2;i++){
if(N%i==0&&isPrime(i)){
N=N/i;
if(j==0&&data[0][0]==0){
data[0][0]=i;
data[0][1]++;
}else if(data[0][0]!=0&&i==data[j][0]){
data[j][1]++;
}else if(i!=data[j][0]){
j++;
data[j][0]=i;
data[j][1]++;
}
/// printf("-->%d %d\n",i,N);
if(isPrime(N)){
//printf("----->>>%d\n",N);
if(data[j][0]!=N){
j++;
data[j][0]=N;
data[j][1]++;
}else{
data[j][1]++;
}
}
break;
}
}
}
printf("%d=",M);
for(i=0;i<=j;i++){
if(i==0&&data[0][1]>1){
printf("%d^%d",data[i][0],data[i][1]);
}
if(i==0&&data[0][1]==1){
printf("%d",data[i][0]);
}
else if(i!=0&&data[i][1]>1){
printf("*%d^%d",data[i][0],data[i][1]);
}else if(i!=0&&data[i][1]==1){
printf("*%d",data[i][0]);
}
//printf("+++++=%d---->>>%d\n",data[i][0],data[i][1]);
}
}
return 0;
}
int isPrime(long n){
int i,flag=1;
for(i=2;i<=n/2;i++){
if(n%i==0){
flag=0;
break;
// n=n/i;
//printf("-->%d",i);
}
}
return flag;
}