zoukankan      html  css  js  c++  java
  • 5.13分解质因数

    Q:任何一个合数可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数。例如 24=2*2*2*3.

     编写一个程序,实现分解质因数。

    方法一:

    根据《分解质因数》http://www.cnblogs.com/youxin/p/3232049.html这篇博客学习所得。

    #include<iostream>
    using namespace std;
    int main()
    {
      int n;
      cin>>n;
      cout<<n<<"=";
      for(int i=2;i<=n;i++)
        while(n!=i)
        {
          if(n%i==0)
          {
            printf("%d*",i);
            n=n/i;
          }
          else
            break;
        }
      
      cout<<n;
    }
    

      

    补充,若是用上述方法还可以解决某个范围内数的质因数分解。

    #include<iostream>
    using namespace std;
    int n;
    int f(int n) {
    	cout<<n<<"=";
    		for(int i=2;i<n;i++) {
    			while(n!=i) {
    				
    				if(n%i==0) {
    					n=n/i;
    					cout<<i<<"*";
    				}
    				else
    					break;
    			}
    		}
    	
    	cout<<n;
    	cout<<endl;
    	return 0;	
    }
    int main() {
    	int a,b;
    	cin>>a>>b;
    	for(int i=a;i<=b;i++)
    	f(i);
    	return 0;
    }
    

      

    方法二:

      先来学习判断一个数据是否是质数。

     

    判断质数

    //方式一
    int isPrime(int n) { if(n==1) return 0; else if(n==3 || n==2) return 1; else { for(int i=2;i<n;i++) { if(n%i!=0) { return 0; } return 1; } } }

      

    //方式二
    int isPrime(int n) {
    for(int i=2;i<=n-1;i++)
    if(n%i==0)	return 0;
    return 1;
    }
    

      

     全部程序:

    #include <iostream>
    using namespace std;
    int isPrime(int n) {
    	for(int i=2;i<=n-1;i++)
    		if(n%i==0)	return 0;
    		return 1;
    } 
    
    void PrimeFactor(int n) {
    	if(isPrime(n))	cout<<n<<" ";
    	else {
    		for(int i=2;i<=n-1;i++)
    			if(n%i==0) {
    				cout<<i<<" ";//第一个因数一定是质因数
    				if(isPrime(n/i)) {//判断第二个因数是否是质数 
    					cout<<" "<<n/i;
    					break;		//找到全部质因子 
    				}
    			else
    				PrimeFactor(n/i);//递归调用函数来分解n/i 
    			break;
    			}
    	}
    }
    
    int main() {
    	int a;
    	cin>>a;
    	PrimeFactor(a);
    	return 0;
    }
    

      

    注意:

    1、若从2开始到n-1顺序查找n的因数,那么第一个找到的因数i一定是质因数。eg:24=2*12

      证明:2是质因数。反证法,假设i不是质因数,则i除了1和i还会有其他的因数,即存在p、q属于[2,N-1]使得p*q=i。 因此pq(n/i)=n,                因此p、q也是n的因数。但我们从2开始递增求n的因数,又因为i是第一个找到的因数,所以在i之前不会有其他的因数,所以结论与题               设产生矛盾。

    2、一个合数的质因数分解的结果是唯一的,因此与分解的顺序无关。

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    基本排序算法分析
    Linux内核浅谈
    Linux内核浅谈
    Linux内核浅谈
    淘宝架构技术的演变
    淘宝架构技术的演变
    淘宝架构技术的演变
    中间件小结
    中间件小结
    中间件小结
  • 原文地址:https://www.cnblogs.com/dd2hm/p/6784561.html
Copyright © 2011-2022 走看看