您的位置:首页 > 其它

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

2014-10-31 00:52 274 查看
给出一个数,求其最大素数因子在素数列表中的位置。

先打表

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

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

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

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

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

内存分配问题:

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

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

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

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

#include <stdio.h>
#include <string.h>

const int N = 1000001;  //全局区
int prime
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: