PAT甲1059. Prime Factors (25)

注意输入为1时需输出“1=1”

#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;

struct factor
{
    long long f;
    int c;
}fac[100010];

bool isprime(long long a)
{
    if(a<=1)return false;
    long long sqr=(long long)sqrt(1.0*a);
    for(long long i = 2;i<=sqr;i++)
    {
        if(a%i==0)return false;
    }
    return true;
}

int main()  
{       
    long long N;
    scanf("%lld",&N);
    long long temp=N;
    long long sqr=(long long)sqrt(1.0*N);
    int num=0;
    for(long long i=2;i<sqr;i++)
    {
        if(isprime(i))
        {
            if(N%i==0)
            {
                fac[num].f=i;
                fac[num].c=0;
                while(N%i==0)
                {
                    fac[num].c++;
                    N=N/i;
                }
                num++;
            }

        }
    }
    if(N>1)
    {
        fac[num].f=N;
        fac[num].c=1;
        num++;
    }
    printf("%lld=",temp);
    if(temp==1)
    {
        printf("1");
    }
    for(int i=0;i<num;i++)
    {
        if(fac[i].c==1)
        {
            printf("%d",fac[i].f);
        }
        else if(fac[i].c>1)
        {
            printf("%d",fac[i].f);
            printf("^");
            printf("%d",fac[i].c);
        }

        if(i!=num-1)
        {
            printf("*");
        }
    }
    printf("\n");
    system("pause");
    return 0;
}
阅读更多
文章标签: 1059
个人分类: 算法笔记学习 PAT
上一篇PAT甲1010. Radix (25)
下一篇PAT甲1096. Consecutive Factors (20)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭