zoukankan      html  css  js  c++  java
  • 1059 Prime Factors

    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 = 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.

    Sample Input:

    97532468
    

    Sample Output:

    97532468=2^2*11*17*101*1291


    /*
        Name:
        Copyright:
        Author:  流照君
        Date: 2019/8/6 11:09:58
        Description:
    */
    #include <iostream>
    #include<string>
    #include <algorithm>
    #include <vector>
    #include<cmath>
    #define inf 0x3f3f3f
    using namespace std;
    typedef long long ll;
    ll prime[inf],a[inf];
    ll num=1;
    void sieve(int n)
    {
        for(int i=2;i<=n;i++)
        {
            if(a[i]==0)
            prime[num++]=i;
            for(int j=i*2;j<=n;j=j+i)
            {
                a[j]=1;
            }
        }
    }
    int main(int argc, char** argv)
    {
        //freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
        fill(a,a+inf,0);
        ll n,flag=0;
        cin>>n;
        sieve(500000);
        //for(int i=1;i<=num;i++)
        //cout<<prime[i]<<" ";
        //cout<<endl;
        if(n==1)
        {
            cout<<n<<"="<<"1";
            return 0;
        }
        cout<<n<<"=";
        for(int i=1;i<num;i++)
        {
            int sum=0;
            while(n%prime[i]==0)
            {
                n=n/prime[i];
                sum++;
            }
            if(flag&&sum)
            {
                if(sum==1)
                    cout<<"*"<<prime[i];
                if(sum>=2)
                {
                    cout<<"*"<<prime[i]<<"^"<<sum;
                }    
            }
            if(flag==0&&sum)
            {
                if(sum==1)
                    cout<<prime[i];
                if(sum>=2)
                {
                    cout<<prime[i]<<"^"<<sum;
                }
                flag=1;
            }
            if(n==1)
            return 0;
        }
        return 0;
    }

    别忘了考虑特例 1

  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11308578.html
Copyright © 2011-2022 走看看