1. 程式人生 > >【演算法】最多約數問題

【演算法】最多約數問題

最多約數問題

題目描述

正整數x的約數是能整除x的正整數。正整數x的約數個數記為div(x)。例如,1,2,5,10都是正整數10的約數,且div(10)=4。 對於給定的2個正整數a<=b,程式設計計算a與b之間約數個數最多的數。

輸入

輸入的第1行有兩個正整數a和b。

輸出

若找到的a和b之間約數個數最多的數是x,則輸出div(x)。

樣例輸入

1 36

樣例輸出

9

解題思路:

一:採用暴力循

二:因為暴力迴圈量太大,太小的數字可以不用迴圈,所以我選擇比較最大值b的開根和b/2比較,保留小的那個,從這裡迴圈

#include<stdio.h>
#include<math.h>
#include<time.h>
int divive(int n){
	int sum=0;
	int i,j;
	for(i=1;i<sqrt(n);i++){
		if(n%i==0) sum+=2;
	}
	j=sqrt(n);
	if(j*j==n) sum++;
	return sum;
}
int main(){
	int a,b,i,j,k,max;
	scanf("%d%d",&a,&b);
	max=0;
	clock_t start,finish;
   	double totaltime;
	//1.
	start=clock();
	for(i=a;i<=b;i++){
		j=yueshu(i);
		if(max<j) max=j;
	}
	finish=clock();
   	totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   	printf("\n該方法執行時間為%f",totaltime);
	
	//2.
	start=clock();
	if(a<b/2) j=a;
	else
		j=b/2;
	for(i=j;i<=b;i++){
			k=yueshu(i);
		if(max<k) max=k;
	}
	finish=clock();
   	totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   	printf("\n該方法執行時間為%f",totaltime);
	                                                                                                                                                                                                  
	printf("\n最大約數為:%d",max);	
	return 0;
	
}

還有更好的解決方法,都可以搜到,就不記錄了。

 

 

感覺自己學的不太好,記錄一下自己寫過的一些程式碼,有錯誤感謝提出!