最大素因子
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.
-
输入
- 有多组测试数据,每一行输入一个数字n.(0<n<=1000000) 输出
- 在接下来的一行,输出结果. 样例输入
-
2 3 4 5
样例输出
-
1 2 1 3
思路:按照普通筛素数的方法,只不过prime数组保存的不再是素数,而是i的最大素因子数,素数的倍数的最大素因子为此素数,素数的最大素因子为其本身。
AC代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define MAXN 1000010
#define MAX(a,b) a>b?a:b
#define fab(a) ((a)>0?(a):-(a))
#define mem(x) memset(x,0,sizeof(x))
#define LL long long
#define INF 0xfffffff
using namespace std;
int prime[MAXN];
int v[MAXN];
void db()
{
mem(v);
int i,j;
int k=0;
prime[1]=k;
k++;
for(i=2;i<MAXN;i++)
{
if(!v[i])
{
prime[i]=k;
for(j=i*2;j<MAXN;j+=i)
v[j]=1,prime[j]=k;
k++;
}
}
}
int main()
{
db();
int i,n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",prime[n]);
}
return 0;
}