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

    输入整数(0-30)分解成所有整数之和。每四行换行一次。

    一种方法是通过深度优先枚举出解。通过递归的方式来实现。

    #include <stdio.h>
    #include <string.h>
    #define MAXN 30
    #define MAXString 64
    int Terms[MAXN];
    int N;
    int Count;
    
    void Search(int Remainder,int Start,int nTerm)
    {
        int i;
        if(Remainder ==0 ){
            Count++;
            if(Count%4!=1)
                printf(";");
            printf("%d=%d",N,Terms[0]);
            for(i=1;i<nTerm;i++)
                printf("+%d",Terms[i]);
            if(Count%4==0)
                printf("
    ");
        }
        else
        {
            for(i=Start;i<=Remainder;i++){
                Terms[nTerm]=i;
                Search(Remainder-i,i,nTerm+1);
    
            }
        }
    }
    void Test1()
    {
        scanf("%d",&N);
        Count=0;
        Search(N,1,0);
        
        if(Count%4!=0)
            printf("
    ");
    }
    void Search1(int Remainder, int Start,char *STerms)
    {
        int i;
        char Tmps[MAXString];
        strcpy(Tmps,STerms);
        for(i=Start;i<=Remainder;i++)
        {
            if(Remainder-i>=i)
            {
                sprintf(Tmps+strlen(STerms),"%d+",i);
                Search1(Remainder-i,i,Tmps);
    
            }else if(Remainder-i==0)
            {
                sprintf(Tmps+strlen(STerms),"%d ",i);
                Count++;
                if(Count%4!=1)
                    printf(";");
                printf("%s",Tmps);
                if(Count%4==0)
                    printf("
    ");
            
            }
        
        }
    }
    void Test2()
    {
        char STerms[MAXString]="";
        int N;
        Count=0;
        scanf("%d",&N);
        Search1(N,1,STerms);
        if(Count%4!=0)
            printf("
    ");
    
    }

    第二种方法是试探下一次是否达到边界,避免了第一种方法的多次无效递归。

    质因数分解,输入大整数long int并分解其为素数的乘积

    //整数分解成素因子
    void Decomposed(long int data){
    	
    	int i;
    	int si=0;
    	int temp=data;
    	for(i=2;i<=temp;i++){
    		if(temp!=i)
    		{
    			while(true){
    				if(temp%i==0 && temp/i!=1){
    					printf("%d*",i);
    					temp/=i;
    					//printf("temp=%d,i=%d
    ",temp,i);
    				}else if(temp%i==0 && temp/i==1){
    					printf("%d",i);
    					temp/=i;
    					//printf("temp=%d,i=%d
    ",temp,i);
    				}
    				else
    					break;
    			}
    		}else{
    			printf("%d
    ",i);	
    			si=1;
    		}
    		
    	}
    	if(si==0)
    		printf("
    ");	
    
    
    }
    
    void TestDecomposed(){
    	long int x=1000234;
    	printf("%ld=",x);
    	Decomposed(x);
    }
    

      

  • 相关阅读:
    Golang关键字—— var
    Ubuntu下搭建Golang开发环境
    CentOS安装MongoDB
    使用2-3法则设计分布式数据访问层
    8 种提升 ASP.NET Web API 性能的方法
    MongoDB 聚合之 MapReduce
    常用开源项目及工具汇总——持续更新
    了解一下jsp
    前苹果副总裁:如果你做的事情毫不费力,就是在浪费时间
    思考
  • 原文地址:https://www.cnblogs.com/chentingk/p/5371539.html
Copyright © 2011-2022 走看看