Calling Extraterrestrial Intelligence Again POJ 1411
题目链接:http://poj.org/problem?id=1411
题目大意:找两个素数p,q满足a/b<=p/q<=1 且p*q<=m,求p*q最大的一组素数对。
第一次想的是筛素数,然后枚举,后来发现没有超时(汗,这让我们写正解的很GG)。
正解是先筛素数,然后用mul数组对于两个素数的积存下较小的那个素数。最后从m向下枚举。
枚举代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxm = 50000;
int prime[6000], cnt, m, a, b;
bool flag[maxm+5];
void pre()
{
	for(int i=2;i<=50000;i++)if(!flag[i])
	{prime[++cnt]=i;
		for(int j=i*i;j<=maxm&&j>0;j+=i)//j可能会溢出
			flag[j]=1;
	}
	return ;
}
int main()
{
	pre();
	while(scanf("%d%d%d",&m,&a,&b),m|a|b)
	{
		int ans1=0,ans2=0;
		for(int i=1;i<=cnt;i++)
			for(int j=i;j<=cnt;j++){
				int p=prime[i],q=prime[j];
				if(a*q<=b*p&&p*q<=m){
					if(p*q>ans1*ans2)
						ans1=p,ans2=q;
				}
				else break;
			}
		printf("%d %d\n",ans1,ans2);
	}
}正解代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxm = 100000;
int prime[10000], cnt, m, a, b, mul[maxm+5];
bool flag[maxm+5];
void pre()
{
	for(int i=2;i<=maxm;i++)if(!flag[i])
	{prime[++cnt]=i;
		for(int j=i*i;j<=maxm&&j>0;j+=i)//j可能会溢出
			flag[j]=1;
		for(int j=1;j<=cnt;j++){
			if(prime[j]*prime[cnt]>maxm) break;
			mul[prime[j]*prime[cnt]]=prime[j];
		}
	}
}
int main()
{
	pre();
	while(scanf("%d%d%d",&m,&a,&b),m|a|b)
	{
		for(int i=m;i>=1;i--){
			if(!mul[i]) continue;
			int p=mul[i],q=i/p;
			if(a*q<=b*p){
				printf("%d %d\n",p,q);break;
			}
		}
	}
}Calling Extraterrestrial Intelligence Again POJ 1411的更多相关文章
- poj 1411 Calling Extraterrestrial Intelligence Again(超时)
		Calling Extraterrestrial Intelligence Again Time Limit: 1000MS Memory Limit: 65536K Total Submissi ... 
- hdu 1239 Calling Extraterrestrial Intelligence Again (暴力枚举)
		Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ... 
- HDUOJ-----(1329)Calling Extraterrestrial Intelligence Again
		Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ... 
- poj 1411 Calling Extraterrestrial Intelligence Again
		题意:给你数m,a,b,假设有数p,q,满足p*q<=m同时a/b<=p/q<=1,求当p*q最大的p和q的值 方法:暴力枚举 -_-|| and 优化范围 我们可以注意到在某一个m ... 
- 【HDOJ】1239 Calling Extraterrestrial Intelligence Again
		这题wa了很多词,题目本身很简单,把a/b搞反了,半天才检查出来. #include <stdio.h> #include <string.h> #include <ma ... 
- 【noi 2.7_413】Calling Extraterrestrial Intelligence Again(算法效率--线性筛素数+二分+测时)
		题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应 ... 
- 穷举(四):POJ上的两道穷举例题POJ 1411和POJ 1753
		下面给出两道POJ上的问题,看如何用穷举法解决. [例9]Calling Extraterrestrial Intelligence Again(POJ 1411) Description A mes ... 
- POJ 1411
		#include<iostream> #include<stdio.h> #include<math.h> #define MAXN 50000 using nam ... 
- 杭电ACM分类
		杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ... 
随机推荐
- JVM之java并发 ——线程安全与锁优化
			概述 人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情.有时候,良好的设计原则不得不向现实 ... 
- Appium移动端自动化测试--录制测试用例并运行
			目录 文章目录如下 录制用例并执行 1.使用Appium desktop录制用例 2.安装Pythony依赖Appium-Python-Client 3.增加隐式等待增强稳定性 4.重新运行 文章目录 ... 
- Linux 中的 ~/. 表示的意思
			在Linux中, ~ 表示用户的目录, 如用户名是Gavin, 那么~/表示 /home/Gavin 所以~/. 表示 用户目录下的隐藏文件. 扩展: 若以用户身份登录 ~ 表示 /home 目录 ... 
- Spring MVC前端控制器不拦截静态资源配置
- pip下载加速的方式
			两种方式 一.临时方式 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple. 例如下载或者更新: 下载:pip install -i h ... 
- Centos 6.10 安装 Jenkins
			前言 持续集成的概念 持续集成,Continuous integration ,简称CI. 持续集成正是针对这一类问题的一种软件开发实践.它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多 ... 
- Java隐式类型转换和强制类型转换
			一.强制类型转换 char 和 整型之间的类型转换 char a7 = 'a'; System.out.println(a7); System.out.println( (int)a7 ); Syst ... 
- flutter 动画
			AnimatedCrossFade AnimatedCrossFade让俩个子widget 交替淡入淡出. class AnimatedCrossFade1 extends StatefulWidge ... 
- iOS webrtc资料总结
			1. webrtc远端图像尺寸改变时,如何调整webrtc ios view的大小 https://www.jianshu.com/p/5e1a8f5bbcf7 2. webRTC实现音频通话听筒和扬 ... 
- sourceTree 3.X免注册[学习]
			一. 在路径C:\****\AppData\Local\Atlassian\SourceTree下创建accounts.json文件 [ { "$id": "1" ... 
