【演算法】最多約數問題
阿新 • • 發佈:2018-11-26
最多約數問題
題目描述
正整數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; }
還有更好的解決方法,都可以搜到,就不記錄了。
感覺自己學的不太好,記錄一下自己寫過的一些程式碼,有錯誤感謝提出!