<强> 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语言实现“幸运数”的实例详解