hdu 2136

原创 2018年04月17日 16:16:53

注解:该题的大意就是每一个合数都可以由两个素数组成,例如4=2+2,5=2+3,要你求出当前数在素数表中的位置。2在第一个位置,5在第三个位置,因为4是合数,则求组成的4的最大素数,4=2+2,5=2+3,则4是第一个位置,5是第三个位置。

这道题,最普通的素数打表,超时。。所以需要一点厉害点的素数筛法。这里贴上一个博客大大的文章素数筛法

然后是代码,首先是一个超时的代码,让我无比尴尬。

#include<iostream>
#include<cstring>

using namespace std;

typedef long long ll;
ll prim[1000005];



int main()
{
	ll i,j,num;
	ll count = 0;
	
	
	memset(prim,0,sizeof(prim));

	prim[1] = 0;
	for(i = 2;i <= 1000000;++i)
	{
		if(!prim[i])
		 {
		 	count++;
		   prim[i] = count;
		for(j = 2*i;j<=1000000;j += i)
		   prim[j] = count;  
	     }
	}
	
	while(cin>>num)
	  cout<<prim[num]<<endl;
	
	
	
	
	return 0;
}
然后是正确代码(没有超时)如下:
#include<stdio.h>
#include<string.h>



typedef long long ll;
ll prim[1000005];



int main()
{
	ll i,j,num;
	ll count = 0;
	
	
	memset(prim,0,sizeof(prim));

	prim[1] = 0;
	for(i = 2;i <= 1000000;++i)
	{
		if(!prim[i])
		 {
		 	count++;
		   prim[i] = count;
		for(j = 2*i;j<=1000000;j += i)
		   prim[j] = count;  
	     }
	}
	
	while(scanf("%d",&num) != EOF)
	  printf("%d\n",prim[num]);
	
	
	
	
	return 0;
}

我要说的是:这两个代码完全一模一样好吗。。第一个是c++的超时,一个是c语言版的过了(345ms)。。我不知道能够说什么。坑。。感觉c++的运行效率好像的确没有c快

hdu2136最大质因子在素数表中的位置

刚开始想到质因子分解,其实不用的,由于主要是在素数表中去查询的,因此,我只要让每个元素标记他的质因子的位置即可? 为什么呢?因为例如10,它是2的倍数,因此我存2,到5的时候,它也是5的倍数,那么我存...
  • u012577123
  • u012577123
  • 2015-02-04 23:17:13
  • 878

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

Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth...
  • wdkirchhoff
  • wdkirchhoff
  • 2014-12-10 12:05:58
  • 667

最大素数因子(hdu2136)

题意: 每个素数在素数表中都有一个序号,设1的序号为0,则 2 的序号为1,3的序号为2,5的序号为3,以此类推。现在要求输出 所 给定的数n的最大质因子的序号,0 分析: 应用素数打表...
  • xilihong816
  • xilihong816
  • 2015-09-30 21:40:23
  • 479

HDU-2136-Largest prime factor(素数筛法)

Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
  • Bear1998
  • Bear1998
  • 2016-10-18 21:57:07
  • 382

HDU2136 巧用素数打表法

每个素数在素数表中都有一个序号,设1的序号为0,则2的序号为1,3的序号为2,5的序号为3,以此类推。现在要求输出所给定的数n的最大质因子的序号,0 本题解法十分巧妙,利用筛选素数的方法进行打表,...
  • alongela
  • alongela
  • 2011-09-04 19:11:06
  • 3003

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

Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
  • hurmishine
  • hurmishine
  • 2016-05-24 20:03:56
  • 4863

HDU 2136

tCoder?如何参加? Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit...
  • AC_AC_ACGIRL
  • AC_AC_ACGIRL
  • 2015-02-03 19:55:29
  • 202

HDU 2136

数论的题目吧,开始用打表的方法求出素数的位置,后来在去搜索,这样超时了,可能是因为数据的组数比较多吧!!! 如果在打表的时候把小于1000000所有的数全部打上去,直接输出去q[i]的值就行啦!! ...
  • u010871244
  • u010871244
  • 2013-09-19 16:41:48
  • 666

HDU-2136(prime_创新)

这道题目开始的时候也是没有看明白到底是个什么意思,,, 看了别人的代码才知道原来是个这么意思, 还是不懂是个什么意思其实,,看代码算了.. 嘿嘿 贴出: #include #include...
  • qinaide_lixiaoshuo
  • qinaide_lixiaoshuo
  • 2012-08-13 22:43:18
  • 418

Vertical Histogram——字母频率柱状图(POJ2136)

问题描述读取四行字母,并输出一个垂直柱状图用以显示在输入中的所有字母的出现次数。输入:1行到4行: 大写字母 , 每行不超过72个字符输出:第一行到第?行: 由星号和空格组成的若干行,最后一行由被分开...
  • a253664942
  • a253664942
  • 2015-05-05 22:44:17
  • 963
收藏助手
不良信息举报
您举报文章:hdu 2136
举报原因:
原因补充:

(最多只允许输入30个字)