标签:des style blog io ar os sp for java
Wiskey
题目大意:每个素数在素数表中都有一个序号,设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
的最大素数因子的序号。
#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; }
HDU2136_Largest prime factor【水题】【筛法求素数】
标签:des style blog io ar os sp for java
原文地址:http://blog.csdn.net/lianai911/article/details/41781111