前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UVa 11621 – Small Factors

UVa 11621 – Small Factors

作者头像
全栈程序员站长
发布2022-07-06 08:43:27
1240
发布2022-07-06 08:43:27
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

称号:发现没有比给定数量少n的。只要2,3一个因素的数字组成。

分析:数论。贪婪,分而治之。

用两个三分球,分别代表乘法2,和繁殖3队列,队列产生的数字,原来{1}。

然后。每取两个指针相应元素*2和*3的值中最小的即为未找到的数字中最小的;

注意,可能生成反复数据。不要存进去(反复数据。一定连续产生)。

说明:打表计算。二分查询输出就可以。

代码语言:javascript
复制
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

int next[330];

int bs(int key, int r)
{
	int l = 0,m;
	while (l < r) {
		m = (l+r)/2;
		if (next[m] < key)
			l = m+1;
		else r = m;
	}
	return r;
}

int main()
{
	int two = 0,three = 0,count = 0;
	next[0] = 1;
	while (next[count] > next[count-1]) {
		if (next[two]*2 < next[three]*3) 
			next[++ count] = next[two ++]*2;
		else {
			if (next[three]*3 == next[two]*2) two ++;
			next[++ count] = next[three ++]*3;
		}
	}
	
	int n;
	while (cin >> n && n)
		cout << next[bs(n, count)] << endl;
		
	return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117515.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月4,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档