c語言峰值演算法 C語言實現「幸運數」的例項詳解

2021-10-12 15:33:10 字數 1990 閱讀 3103

c語言實現「幸運數」的例項詳解

1、題目:

幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的「篩法」生成。 首先從1開始寫出自然數1,2,3,4,5,6,…. 1 就是第乙個幸運數。 我們從2這個數開始。把所有序號能被2整除的項刪除,變為: 1 _ 3 _ 5 _ 7 _ 9 …. 把它們縮緊,重新記序,為: 1 3 5 7 9 …. 。這時,3為第2個幸運數,然後把所有能被3整除的序號位置的數刪去。注意,是序號位置,不是那個數本身能否被3整除!! 刪除的應該是5,11, 17, … 此時7為第3個幸運數,然後再刪去序號位置能被7整除的(19,39,…) 最後剩下的序列類似: 1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, … 本題要求: 輸入兩個正整數m n, 用空格分開 (m < n < 1000*1000) 程式輸出 位於m和n之間的幸運數的個數(不包含m和n)。 例如: 使用者輸入: 1 20 程式輸出: 5 例如: 使用者輸入: 30 69 程式輸出: 8

資源約定: 峰值記憶體消耗(含虛擬機器) < 64m cpu消耗 < 2000ms

2、**實現:

2023年12月20日23:01:47

幸運數統計

# include

# define max 50000

int create_luck(int * );

int num_luck(int *,int,int,int);

int main(void)

int luck[max] = ;

int max,n,i;

int num1,num2;/*標定範圍*/

max = create_luck(luck);/*幸運數生成*/

scanf("%d%d",&num1,&num2);

n = num_luck(luck,max,num1,num2);/*計算num1到num2之間的幸運數個數*/

printf("%d\n",n);

/*for(i=0;i

printf("%d\t",luck[i]);//遍歷幸運數

return 0;

int create_luck(int * luck)

/*1~2*max的幸運數*/

int i,j;

int point_pre=1;/*point_pre用來標記被除數陣列下標,也就是上一次迴圈找到的幸運數*/

int point_max=max;/*point_max用來標記遍歷一遍完成刪除之後剩餘的元素個數*/

/*原始奇數陣列,第一次將偶數完全刪除,所以所有幸運數在奇數中生成即可*/

for(i=0;i

luck[i] = 2*i+1;

/*生成幸運數*/

while(point_pre < point_max){

for(j = point_pre, i = point_pre; j

if((j+1) % luck[point_pre] != 0){

luck[i] = luck[j];

i++;

point_pre++;/*幸運數個數加1,也是內層迴圈初始值後移1*/

point_max = i;/*便遍歷一遍之後,i之前的符合區域性條件(取餘不為0),point_max則劃分界限*/

/*注意:迴圈完成時,point_pre之前的數都是幸運數,

但是陣列定義長為max,point_max之後的數(max-point_pre個)是無用的

return point_max;

int num_luck(int * luck,int max,int num1,int num2)

int i,n=0;

for(i=0;i < max;i++){/*i

if(luck[i] >= num2)

break;

else if(luck[i] > num1)/*不包含num1和num2*/

n++;

return n;

3、運**況:

C語言實現「幸運數」的例項詳解

c語言實現 幸運數 的例項詳解 1 題目 標題 幸運數 幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的 篩法 生成。首先從1開始寫出自然數1,2,3,4,5,6,1 就是第乙個幸運數。我們從2這個數開始。把所有序號能被2整除的項刪除,變為 1 3 5 7 9 把它們縮緊,重新記序,為 1 3...

c語言實現磁碟排程演算法 C語言實現洗牌演算法

首先看一道題目 有乙個大小為100的陣列,裡面的元素是從 1 到 100,隨機從陣列中選擇50個不重複數。用math.random 100,就可以拿到乙個 0 到 99 的隨機數,是不是重複50次就可以了?當然不是,假如,第一次隨機到5,第二次如果再一次隨機到5的話,要求是選擇不重複的數,所以要選出...

lfu演算法實現c語言 lru演算法c語言實現

a 分配頁面 b 置換演算法 c 程式訪問 d 換出頁面 正確答案 d 單選題 22.設某程序的頁訪問串為 1 3 1 2 4,工作集為 3 塊,問 按 lru 頁面替換演算法,儲存管理採取虛擬儲存技術 組成 物理記憶體 主機板上的ram 和硬碟上的 虛擬記憶體聯合組成 頁面大小 4kb 例 頁面排...