7-45 完數之先函數調用判斷

所謂完數就是該數恰好等於除自身外的因子之和。例如:6=1+2+3,其中1、2、3爲6的因子。本題要求編寫程序,找出任意兩正整數m和n之間的所有完數。

輸入格式:
輸入在一行中給出2個正整數m和n(1<m≤n≤10000),中間以空格分隔。

輸出格式:
逐行輸出給定範圍內每個完數的因子累加形式的分解式,每個完數佔一行,格式爲“完數 = 因子1 + 因子2 + … + 因子k”,其中完數和因子均按遞增順序給出。若區間內沒有完數,則輸出“None”。

輸入樣例:
2 30

輸出樣例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

#include <stdio.h>
int main() 
{
	int isWanshu(int n);//函數聲明 
	int m,n,i,j;
	int isHave=0;
	scanf("%d %d",&m,&n);
	for(i=m;i<=n;i++)	
	{
		
		if(isWanshu(i))//調用完數判斷函數 
		{
			int sum=1;
			printf("%d = 1",i);
			for(j=2;j<i;j++)
			{
				
				if(i%j==0)
				{
				   printf(" + %d",j);
			   sum=sum+j;	
				}
//跳出循環用處大嗎				 
				if 	(sum==i)
				{
				break;
			}
			
			}
			printf("\n");
		  isHave=1;	
	   }
    }
    if(isHave==0)
    {
    	printf("None\n");
	}
}
//用來判斷是否是完數 
int isWanshu(int n)
{
	    int sum = 1;
		int isWan = 0;
		int i;
		//關鍵是找到所有因子的方法,這裏的方法是從2開始遍歷尋找。除以2對非常大的數有用 
		for( i = 2; i<=n/2; i++)
		{
			if(n%i==0)
			{
				sum += i;	
			}
		}
		if (sum==n){
			isWan = 1;
		}

        return isWan;
}

取之於民,用之於民

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章