hdu 2136 素数筛选法

来源:互联网 发布:巴啦啦小魔仙玩具淘宝 编辑:程序博客网 时间:2024/06/05 09:30
#include<stdio.h>#include<string.h>int Prime[1000010],Primer[1000010];void IsPrime(){int sum = 0;for(int i = 2; i <= 1000000; ++i)if(Prime[i] == 0){++sum;Prime[i] = sum;for(int j = i+i; j <= 1000000; j+=i)Prime[j] = sum;}}int main(){IsPrime();int N;while(~scanf("%d",&N)){printf("%d\n",Prime[N]);}return 0;}

题目大意:每个素数在素数表中都有一个序号,设1的序号为0,则 2

的序号为1,3的序号为2,5的序号为3,以此类推。现在要求输出 所

给定的数n的最大质因子的序号,0<n<1000000。

思路:巧用素数打表法。用sum计算素数的序号,将素数连同他的倍

数一起置为它的素数序号, 从小到大循环, 这样数组里存放的序号就

是最大素数因子的序号了。

注意:初始化时令所有数为0,Prime[0] = Prime[1] = 1。

即Prime[i]为0是素数,Prime[i]为1为素数。改变之后Prime[i]为数 i

的最大素数因子的序号 。

0 0
原创粉丝点击