• 分解质因数


    题目描述
    今天数学课上,桐桐学习了质数的知识:一个正整数如果只能被1和它本身整除,那么这个整数便是质数。桐桐就想:任意一个正整数是否都能分解成若干个质数相乘的形式呢?输入一个正整数n,把它分解成质因子相乘的形式,如果为质数则输出该数本身。如:36=2×2×3×3;19=19。你能帮助桐桐解决这个难题吗?

    输入
    输入一个正整数n(2≤n≤109)

    输出
    把它分解成质因子相乘的形式,如果为质数则输出该数本身,乘数从小到大输出。

    样例输入
    复制样例数据
    99
    样例输出
    99=3311

    一开始,判断是素数的时候。应该5=5.我直接输出的5.真的是,以为我算法有问题。疯狂查找其他的算法。难得玩啊。

    #include <iostream>
    #include <cmath>
    using namespace std;
    int main()
    {
        int n,i,x;
        int flag=0;
        cin>>n;
        x=sqrt(n);
        for(i=2;i<=x;i++)
        {
            if(n%i==0)
            {
                if(flag==0)
                cout<<n<<"=";
                cout<<i<<"*";
                flag=1;
                n=n/i;
                x=sqrt(n);
                i=i-1;
            }
        }
        cout<<n<<endl;
        return 0;
    }
    
    

    上面是AC之前的。

    下面是AC后的。

    #include <iostream>
    #include <cmath>
    bool isprime(int n)
    {
        int i;
        for(i=2;i*i<=n;i++)
        {
            if(n%i==0)
            return false;
        }
    
            return true;
    }
    using namespace std;
    int main()
    {
        int n,i,x,a;
        int flag=0;
        cin>>n;
        x=sqrt(n);
        a=isprime(n);
        if(!a)
        {
            for(i=2;i<=x;i++)
        {
            if(n%i==0)
            {
                if(flag==0)
                cout<<n<<"=";
                cout<<i<<"*";
                flag=1;
                n=n/i;
                x=sqrt(n);
                i=i-1;
            }
        }
        cout<<n<<endl;
        }
        if(a)
            cout<<n<<"="<<n<<endl;
    
        return 0;
    }
    

    菜鸟一枚,以前啥也没学。

  • 相关阅读:
    NOIP2002字串变换[BFS]
    NOIP2000单词接龙[DFS]
    NOIP2003传染病控制[按层DFS]
    NOIP1999邮票面值设计[搜索|DP]
    USACO1.1Broken Necklace[环状DP作死]
    洛谷P1120小木棍[DFS]
    NOIP2000进制转换
    Miller-Rabin素数快速检测
    【数论算法理论与实现】
    洛谷P1141 01迷宫
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319604.html
Copyright © 2020-2023  润新知