给出一个数,求其最大素数因子在素数列表中的位置。
先打表
构建一个大数组,全部赋初值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;
}