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

  • 相关阅读:
    Codeforces Round #251 (Div. 2) A
    topcoder SRM 623 DIV2 CatAndRat
    topcoder SRM 623 DIV2 CatchTheBeatEasy
    topcoder SRM 622 DIV2 FibonacciDiv2
    topcoder SRM 622 DIV2 BoxesDiv2
    Leetcode Linked List Cycle II
    leetcode Linked List Cycle
    Leetcode Search Insert Position
    关于vim插件
    Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11308578.html
Copyright © 2011-2022 走看看