题目链接地址:1059. Prime Factors
最主要的是注意特殊情况,(n=1),贴上代码,还请大家多多指教。
#include <iostream> #include <map> #include <queue> #include <stdio.h> #include <vector> #include <algorithm> #include <stack> #include <stdlib.h> #include <string.h> #include <math.h> #include <string> using namespace std; #define N 10000 bool mark[N+1]; int prime[N+1]; int primesize; void init(){ primesize=0; for (int i=2;i<=N;i++) { if(mark[i]==true)continue; prime[primesize++]=i; for(int j=i*i;j<=N;j+=i){ mark[j]=true; } } } int main(){ init(); int n; int i; scanf("%d",&n); if (n==1) { printf("1=1"); return 0; } int m=n; int ansprime[30]; int anssize=0; int ansnum[30]; for( i=0;i<primesize;i++){ if(n%prime[i]==0){ ansprime[anssize]=prime[i]; ansnum[anssize]=0; while (n%prime[i]==0) { ansnum[anssize]++; n/=prime[i]; } anssize++; if(n==1)break; } } if(n!=1){ ansprime[anssize]=n; ansnum[anssize++]=1; } int ans=0; printf("%d=",m); for (i=0;i<anssize;i++) { if(i==0){ if(ansnum[i]==1) printf("%d",ansprime[i],ansnum[i]); else printf("%d^%d",ansprime[i],ansnum[i]); }else{ if(ansnum[i]==1) printf("*%d",ansprime[i],ansnum[i]); else printf("*%d^%d",ansprime[i],ansnum[i]); } } return 0; }