你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
201412022200-hd-Largest prime factor
 

Largest prime factor

Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7195 Accepted Submission(s): 2554 

Problem Description Everybody knows any number can be combined by the prime number.
Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.
Specially, LPF(1) = 0.

Input Each line will contain one integer n(0 < n < 1000000).

Output Output the LPF(n).

Sample Input
1
2
3
4
5

Sample Output
0
1
2
1
3题目大意   给定1--1000000中任意一个数,输出其最大质因子数是第几个质数。解题思路   为了不超时肯定需要打表,我原来的思路是一步一步求,第一步打表1--1000000中的素数,第二步打表1--1000000中的素数是第几个,第三部打表1--1000000中的所有数的最大质因子,然后两个数组相结合输出结果。可惜这种方法太麻烦,果断超时。   思索了好久,还是采用了打表的方法,跟素数打表差不多,但是不只是因为素数而将其标记,而是如果是素数,则将其及其倍数全部用这个素数的位置来标记。因为i不断变化,所以如果是6,第一次标记为2,后面可以用3来标记替换。代码
#include
#include
int a[1100000];
int main()
{
	int n,i,j,now;
	memset(a,0,sizeof(a));//初始化,将其全部标记为0 
	a[1]=0;
	now=0;//标记位置,也就是第几个 
	for(i=2;i<=1000000;i++)
	{
		if(a[i]==0)//如果其是质数 
		{
			now++;
			for(j=i;j<=1000000;j+=i)
			    a[j]=now;//则将其在范围内的所有倍数都用now标记, 
		}//i不断增大,则最大质因子不断被替换。 
	} 
	while(scanf("%d",&n)!=EOF)
	{
		printf("%d\n",a[n]);
	}
	return 0;
}
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089