题目含义
找出一个数最大素数因子的序号
题目分析
我们可以在筛素数的同时,用这个素数标记它的倍数,说明这些倍数一定有它这个素数因子
这样筛一遍下来,一个数大的素数因子就会覆盖它小的素数因子
题目代码
#include<iostream> #include<stdio.h> #include<string.h> #include<vector> using namespace std; typedef long long LL; const int maxn=1000007; int prime[maxn],num[maxn]; bool check[maxn]; int cnt=0; void Prime(){ num[1]=0; for(int i=2;i<maxn;i++) if(!check[i]){ prime[cnt++]=i; for(int j=1;j*i<maxn;j++){ check[j*i]=true; num[j*i]=cnt; } } } int main(){ Prime(); int n; while(~scanf("%d",&n)){ printf("%d\n",num[n]); } return 0; }