整数分解 && 质因数分解

输入整数(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("\n");
    }
    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("\n");
}
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("\n");
        
        }
    
    }
}
void Test2()
{
    char STerms[MAXString]="";
    int N;
    Count=0;
    scanf("%d",&N);
    Search1(N,1,STerms);
    if(Count%4!=0)
        printf("\n");

}

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

 

质因数分解,输入大整数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\n",temp,i);
				}else if(temp%i==0 && temp/i==1){
					printf("%d",i);
					temp/=i;
					//printf("temp=%d,i=%d\n",temp,i);
				}
				else
					break;
			}
		}else{
			printf("%d\n",i);	
			si=1;
		}
		
	}
	if(si==0)
		printf("\n");	


}

void TestDecomposed(){
	long int x=1000234;
	printf("%ld=",x);
	Decomposed(x);
}

  

 

posted @ 2016-04-09 14:05  天目山电鳗  阅读(639)  评论(0编辑  收藏  举报