数论专题 hdu2136
本题题意:给出一个数,求出其最大素数因子在素数中的位置.
代码如下:
#include <cstdio> #define MAX 1000000 using namespace std; int a[MAX+1]; void Prime() { a[1] = 0; int t = 2; int l = 1; int i; while(t <= MAX) { for(i=t;i<=MAX;i+=t)a[i] = l; for(i=t;i<=MAX;i++)if(a[i]==0){t = i;break;} l++; if(i == MAX+1)break; } } int main() { Prime(); int n; while(~scanf("%d",&n)) { printf("%d\n",a[n]); } return 0; }
这个代码感觉太神奇了,我自己写的一个就TLE了,上面这个代码的思路是先铺满2的倍数再铺满3的倍数,5的倍数依次。。然后最后得到的每个位置上就是最大因子的序号了。