1059. Prime Factors

来源:互联网 发布:最强大脑 小度 知乎 编辑:程序博客网 时间:2024/05/22 15:10

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.

Input Specification:

Each input file contains one test case which gives a positive integer N in the range of long int.

Output Specification:

Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi's are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is 1 and must NOT be printed out.


这题做的我也是挺纠结的,首先是获得乘数,各种1,2,3特殊考虑,然后就是打印,最后一个因子有多个的情况要判断

#include <stdio.h>#include <stdlib.h>#include <math.h>#include <vector>#include <algorithm>using namespace std;vector<long> factor;void Num(long num,vector<long> &factor);bool Prime( long a);int main (){    long num;    scanf("%ld",&num);    if( num<4)    {        printf("%d=%d\n",num,num);        return 0;        }    Num(num,factor); //    sort(factor.begin(),factor.end());    int i,length=factor.size();    int count=1;    printf("%ld=%ld",num,factor[0]);    for( i=1;i<length;i++)     {         if( factor[i]==factor[i-1])         {             if( count==1) printf("^");             count++;             }         else          {              if( count!=1) printf("%d",count);              printf("*%ld",factor[i]);              count=1;              }         }    if( count!=1) printf("%d",count);    printf("\n");    system("pause");    return 0;    }void Num(long num,vector<long> &factor){     if( num<2) return ;     if( Prime(num))     {         factor.push_back(num);         return;         }     long i;     if( num%2==0)     {         factor.push_back(2);         Num(num/2,factor);         }     else     {         for( i=3;i<=sqrt(num);i++)         {              if( num%i==0)               {                  if( Prime(i))                  {                  factor.push_back(i);                  Num(num/i,factor);                  break;                  }                  }              }         }     }bool Prime( long a){     for( int i=2;i<=sqrt(a);i++) if( a%i==0) return false;     return true;     }


0 0
原创粉丝点击