給定範圍a
至b
和編號k
,找到a
至b
[包括兩者]之間的所有k-prime數字。 k-prime的定義:如果一個數字具有k個不同的素數因子,那麼它就是一個k-素數。找到k個素數的個數;
即a=4
,b=10
k=2
答案是2
。由於6的主要因素是[2,3],10的主要因素是[2,5]。
現在,這裏是我的嘗試
#include<stdio.h>
#include<stdlib.h>
int main(){
int numOfInp;
scanf("%d",&numOfInp);
int a,b,k;
scanf("%d %d %d",&a,&b,&k);
int *arr;
arr = (int*)calloc(b+1,sizeof(int));
int i=2,j=2,count=0;
//Count is the count of distic k prim factors for a particular number
while(i<=b){
if(arr[i]==0){
for(j=i;j<=b;j=j+i){
arr[j]++;
}
}
if(i>=a && arr[i]==k)
count++;
i++;
}
printf("%d\n",count);
free(arr);
return 0;
}
這個問題是從Codechef
這就是我所做的考慮,我把大小B的數組,並從2日開始的每個號碼,我做了以下。
2查看arr[2]
是否爲0,然後arr[2]++,arr[4]++,arr[6]++ ....
等。
3查看arr[2]
是否爲0,然後arr[3]++,arr[6]++,arr[9]++ ....
等。
由於arr[4]
不爲零,請將其保留。
最後,值arr[i]
會給我答案,即arr[2]
是1,因此2是1素數,arr[6]
是2,因此6是2素數。
問題:
- 什麼是這個代碼的複雜性,並能在它爲O(n)做什麼?
- 我在這裏使用動態編程嗎?
這看起來像一個家庭作業問題。你知道如何計算複雜性嗎? – levengli
@levengli不,它不是作業,我想複雜度會是n/2 + n/3 + n/4 + n/5 ...等等。 – Kraken
@Kraken循環內有一個循環,內部循環的變量取決於外部循環。 「O(n^2)」複雜性的標誌。此外,您的縮進可能會更好,但很難閱讀代碼。 –