hdu 2136 (Largest prime factor)就是简单 的筛选素数法

Largest prime factor

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 7009    Accepted Submission(s): 2482

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

Author

Wiskey

Source

HDU 2007-11 Programming Contest_WarmUp

题目大意:

就是每个数都能找到与之相距最近的 比他小的素数,求出该素数在整个素数表中的位置。

代码如下:

有两种方法。

方法一:用一个标记变量来标记是第几位。

代码如下:

#include<stdio.h>
#include<string.h>
#define max 1001000
int a[max],prime[max];
int main()
{
	int n,i,j,count=0;
	memset(a,0,sizeof(a));
	memset(prime,0,sizeof(prime));
	for(i=2;i<max;i++)
	{
		if(prime[i]==0)//判断是否是素数,是素数为 0 否则为 非零的数
		{
			count++;//标记变量
			a[i]=count;
			for(j=i;j<max;j+=i)
			{
				prime[j]=i;//对所有的 非素数进行 前期的 遍历,减少运算量
			}
		}
	}
	while(~scanf("%d",&n))
	{
		if(n==1)
		{
			printf("0\n");
			continue;
		}
		int k=prime[n];
		printf("%d\n",a[k]);
	}
	return 0;
}

方法二:

就是直接将位数存入数组中,直接输出就可以了。

代码如下:

#include<stdio.h>
#include<memory.h>//对内存进行操作的头文件
#define max 1000005
int num[max];
int main()
{
	int n;
	int count=0;
	memset(num,0,sizeof(num));
	for(int i=2;i<max;i++)//筛选素数打表法
	{
		if(num[i]==0)
		{
			count++;
			for(int j=i;j<max;j+=i)
			num[j]=count;
		}
	}
	while(~scanf("%d",&n))
	{
		printf("%d\n",num[n]);
	}
	return 0;
}
时间: 2024-10-10 08:51:41

hdu 2136 (Largest prime factor)就是简单 的筛选素数法的相关文章

HDU 2136 Largest prime factor (最大素因子序号,cin超时呀!!!)

Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10004    Accepted Submission(s): 3534 Problem Description Everybody knows any number can be combined by the prime number. No

HDU 2136 Largest prime factor (筛选法求素数)

Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7297    Accepted Submission(s): 2589 Problem Description Everybody knows any number can be combined by the prime number. Now

HDU 2136 Largest prime factor 数论

Largest prime factor Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u 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

HDU 2136 Largest prime factor (素数打表。。。)

题意:给你一个数,让你求它的最大因子在素数表的位置. 析:看起来挺简单的题,可是我却WA了一晚上,后来终于明白了,这个第一层循环不是到平方根, 这个题和判断素数不一样,只要明白了这一点,就很简单了. 代码如下: #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <cstring>

HDU 2136 Largest prime factor

水题,晒一遍素数并标注就OK了. #include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<

HDU 2136 Largest prime factor 参考代码

#include <iostream> #include <vector> #include <cmath> using namespace std; const int MAX=1000001; bool nums[MAX]; int indexes[MAX]; void eraosthenes() { int n=sqrt((double)MAX); for(int i=2; i<=n; i++) { int pos=i*i; while(pos<MAX

2136 Largest prime factor(打表)

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 E

(hdu step 2.1.3)Largest prime factor(求一个数的最大质因子的位置)

题目: Largest prime factor Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4868 Accepted Submission(s): 1452   Problem Description Everybody knows any number can be combined by the prime number.Now,

Largest prime factor

problem 3:Largest prime factor 题意:求600851475143的最大的质因数 代码如下: 1 #ifndef PRO3_H_INCLUDED 2 #define PRO3_H_INCLUDED 3 4 #include "prime.h" 5 6 namespace pro3{ 7 long long solve(){ 8 long long n=600851475143LL,maxn=0;; 9 for(long long i=1;i*i<=n;