zoukankan      html  css  js  c++  java
  • 质数因子

    题目描述

    功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如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;
    }
    
    感谢阅读,如有问题,请批评指正,谢谢。
  • 相关阅读:
    Oracle删除.dbf文件报错
    Java 7 新的 try-with-resources 语句,自动资源释放
    模式对话框提交form之后总是打开新的页面
    MyEclipse更改项目的发布目录
    IntelliJ IDEA 更换发布目录
    java.sql.SQLException: ORA-00942: 表或视图不存在
    编码那点事
    配置nginx实现windows/iis应用负载均衡
    MSMQ消息队列
    .NET 分布式技术比较
  • 原文地址:https://www.cnblogs.com/clwsec/p/11469863.html
Copyright © 2011-2022 走看看