• 质数因子


    题目描述

    功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格。
    来源

    分析

    1.要求的是某个整数的质数因子,也就是整数的因式分解(所有的因子都要分解成质数)如180 = 2*2*3*3*5
    2.需要知道的是:质数为乘法的最小单元,所有整数都可以表示成 质数的乘积 的形式 具体不做过多介绍。
    3.因此,这个就是要求某个整数的因子(所有因子均为质数),然后顺序输出即可。

    代码

    #include <iostream>
    using namespace std; 
    int main() 
    {
    	long n;
    	while(cin>>n)
    	{	//n不为1,继续分解 
    		while(n != 1)
    		{	//每次均从2开始 
    			for(int i = 2; i<= n;i++)
    			{	//每次获取的i必然为质数 
    				if(n%i == 0)
    				{
    					n /= i;
    					cout<<i<<" ";
    					break;
    				}
    			}
    		}
    	}
    	return 0;
    }
    

    改进

    上面的算法在n是合数时,并没有多大的问题,但是如果n是质数且比较大,循环次数将会比较多。因此,可以添加判断质数的环节,进行一定程度优化。

    #include <iostream>
    #include <cmath>
    using namespace std; 
    
    //判断是否是质数 
    bool zhishu(long n)
    {
    	bool flag = true;
    	for(int i = 2; i <= sqrt(n); i++)
    	{
    		if(n%i == 0)
    		{
    			flag = false;
    			break;
    		}
    	}
    	return flag;
    }
    
    int main()
    {
    	long n;
    	while(cin>>n)
    	{
    		//n不为1,继续分解 
    		while(n != 1)
    		{
    			if(zhishu(n))
    			{
    				cout<<n<<" ";
    				break;
    			}
    			else
    			{
    				//每次均从2开始 
    				for(int i = 2; i <= n; i++)
    				{	//每次获取的i必然为质数 
    					if(n%i == 0)
    					{
    						n /= i;
    						cout<<i<<" ";
    						break;
    					}
    				}
    			}
    		}
    	}
    	return 0;
    }
    
    感谢阅读,如有问题,请批评指正,谢谢。
  • 相关阅读:
    list 集合工具类
    Java获取当前系统时间的前N小时时间
    注意点
    小bug
    Linux常用命令
    MySql的执行计划
    【解决问题】引入.vmx文件后,xshell连接Could not connect to ‘192.168.211.132‘ (port 22): Connection failed
    星涛:javaEE学习路线一览
    Vue响应式原理
    Java操作Xml文件
  • 原文地址:https://www.cnblogs.com/clwsec/p/11469863.html
Copyright © 2020-2023  润新知