[ACM Steps] 2.1.4 最大素数因子的位置

来源:互联网 发布:linux 运行r语言脚本 编辑:程序博客网 时间:2024/05/11 13:10

给出一个数,求其最大素数因子在素数列表中的位置。


先打表

构建一个大数组,全部赋初值0。

下标从第一个素数2的开始,判断值是否为0,

若是,表示当前下标对应值是一个新的素数,并且是当前最大的素数。

对于其倍数值,更新为当前值,即当前最大的素数因子。


-----------------------------------------------------------

内存分配问题:

全局区:用于存放全局变量和静态变量。

堆(heap):程序员申请并指定大小,new、malloc。

栈(stack):编译器自动分配释放,存放局部变量。申请空间大于剩余空间时,溢出报错!

-------------------------------------------------------------


#include <stdio.h>#include <string.h>const int N = 1000001;  //全局区int prime[N];int main(){int pos = 0;<span style="white-space:pre"></span>//栈memset(prime,0,sizeof(prime));prime[1] = 0;for(int i = 2;i < N;i++){if(prime[i] == 0)//一个新的素数因子{pos++;prime[i] = pos;for(int j = i;j < N;j =j+i)//更新因子的倍数值的位置{prime[j] = pos;}}}int num;while(scanf("%d",&num) != EOF){printf("%d\n", prime[num]);}return 0;}



0 0
原创粉丝点击