C语言实现“幸运数”的实例详解

  

<强> C语言实现“幸运数”的实例详解

  

<强> 1,题目:

  

标题:幸运数
  

  

幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。首先从1开始写出自然数1,2,3,4,5,6,…。1就是第一个幸运数。我们从这2个数开始。把所有序号能被2整除的项删除,变为:1 3 7 5 _ _ _ _ 9…。把它们缩紧,重新记序,为:1 3 5 7 9…。2。这时,3为第个幸运数,然后把所有能被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 & lt;n & lt;1000 * 1000)程序输出位于m和n之间的幸运数的个数(不包含m和n)。例如:用户输入:1 20程序输出:5例如:用户输入:69程序输出:8
  

  

资源约定:峰值内存消耗(含虚拟机)& lt;64 CPU消耗& lt;2000 ms

  

<强> 2代码实现:

     /*   2016年12月20日23:01:47   幸运数统计   */# include   #定义MAX 50000      int create_luck (int *);   int num_luck (int, int, int, int);      int主要(空白)   {   int运气(MAX)={0};   int马克斯,n,我;   int num1, num2;/*标定范围*/max=create_luck(运气);/*幸运数生成*/scanf (“% d % d”, num1,, num2);   n=num_luck(运气,马克斯,num1, num2);/*计算num1到num2之间的幸运数个数*/printf (" % d \ n, n);/* (i=0; i<马克思;我+ +){   printf (" % d \ t”,运气[我]);//遍历幸运数   } */返回0;   }      int create_luck (int *运气)   {/* 1 ~ 2 *最大的幸运数*/int i, j。   int point_pre=1;/* point_pre用来标记被除数数组下标,也就是上一次循环找到的幸运数*/int point_max=MAX;/* point_max用来标记遍历一遍完成删除之后剩余的元素个数*//*原始奇数数组,第一次将偶数完全删除,所以所有幸运数在奇数中生成即可*/(i=0; i<马克思;我+ +){   运气[我]=2 * i + 1;   }/*生成幸运数*/而(point_pre & lt;point_max) {   j=point_pre,我=point_pre;j之前      

<强> 3,运行情况:

  

 C语言实现“幸运数”的实例详解

  

以上就是C语言实现“幸运数”的实例,这种小算法还有需要改进,这里提供简单实例,如果大家有疑问可以留言,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

C语言实现“幸运数”的实例详解