ural 1748 The Most Complex Number 和 丑数
题目:http://acm.timus.ru/problem.aspx?space=1&num=1748
题意:求n范围内约数个数最多的那个数。
Roughly speaking, for a number to be highly composite it has to have prime factors as small as possible, but not too many of the same. If we decompose a number n in prime factors like this:
where
are prime, and the exponents
are positive integers, then the number of divisors of n is exactly
Hence, for n to be a highly composite number,
- the k given prime numbers pi must be precisely the first k prime numbers (2, 3, 5, ...); if not, we could replace one of the given primes by a smaller prime, and thus obtain a smaller number than n with the same number of divisors (for instance 10 = 2 × 5 may be replaced with 6 = 2 × 3; both have four divisors);
- the sequence of exponents must be non-increasing, that is
; otherwise, by exchanging two exponents we would again get a smaller number than n with the same number of divisors (for instance 18 = 21 × 32 may be replaced with 12 = 22 × 31; both have six divisors).
c++ 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define ll long long
ll n, ansa, ansb;
int p[] = {, , , , , , , , , , , , , , }; void dfs(int pos, ll num, int div, int limit )
{
if ( div>ansb || (div==ansb && num<ansa) ){
ansa = num; ansb = div;
}
if (pos == ) return ; for ( int i=; i<=limit; ++i )
{
if ( n/num < p[pos]) break;
num *= p[pos];
dfs(pos+, num, div*(i+), i);
}
} int main(int argc, char**argv)
{
int T; scanf("%d", &T);
while ( T-- ){
//scanf("%lld", &n);
cin >> n;
if (n==) {
puts("1 1"); continue;
}
ansa = ansb = -;
dfs(, , , );
//printf("%lld %lld\n", ansa, ansb);
cout << ansa << ' ' << ansb << endl;
}
return EXIT_SUCCESS;
}
python 代码 注意这代码会TLE,具体是什嘛原因,我没有具体查了。貌似测试10^18都很快的。
p= [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
ansa=0; ansb=0 def dfs(pos, num, div, limit, n):
global ansa, ansb
if div>ansb or ( div==ansb and ansa>num ):
ansa = num; ansb = div
if pos == 15: return for i in xrange(1, limit+1):
if (n/num) < p[pos] : return
num *= p[pos]
dfs(pos+1, num, div*(i+1), i, n) if __name__ == '__main__':
T = input()
while T:
T -= 1
n = input()
if n == 1:
print 1, 1; continue
ansa = ansb = -1
dfs(0, 1, 1, 60, n)
print ansa, ansb
这种数有点类似与丑数,对于丑数的求法。
丑数:因子只含2,3,5的数。 例如求第n个丑数。
bruteforce 是有用的。效率太低了。
如果有一个丑数数组,那么这个数组接下来一个丑数会是哪个数呢?毫无疑问这个数是有数组里的元素乘上2,3,5里的某一个数,这个数满足大于当前丑数数组最后一个元素,最小的满足这个条件的数就是下一个丑数。即求min( 2*a, 3*b, 5*c ) ,枚举求2a,3b5c是可行的。但二分会是很不错的选择, 复杂度为o(n*3logn)。
def find(p, x):
l = 0; r = len(p)-1
while l<=r:
mid = (l+r)>>1
if x*p[mid]>p[-1]:
r = mid-1
else : l = mid+1
return x*p[l] def solve(n):
p=[1]; cnt = 0 # cnt
while cnt < n:
cnt += 1
a = find(p, 2)
b = find(p, 3)
c = find(p, 5)
p.append(min(a, b, c) )
print p[-1] if __name__ == '__main__':
n = input()
solve(n)
ural 1748 The Most Complex Number 和 丑数的更多相关文章
- URAL 1748. The Most Complex Number(反素数)
题目链接 题意 :给你一个n,让你找出小于等于n的数中因子个数最多的那个数,并且输出因子个数,如果有多个答案,输出数最小的那个 思路 : 官方题解 : (1)此题最容易想到的是穷举,但是肯定超时. ( ...
- URAL 1748 The Most Complex Number
题目链接:https://vjudge.net/problem/11177 题目大意: 求小于等于 n 的最大反素数. 分析: n <= 10^18,而前20个素数的乘积早超过10^18,因此可 ...
- LeetCode OJ:Ugly Number(丑数)
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
- 【easy】263. Ugly Number 判断丑数
class Solution { public: bool isUgly(int num) { ) return false; ) return true; && num % == ) ...
- 264 Ugly Number II 丑数 II
编写程序找第 n 个丑数.丑数就是只包含质因子 2, 3, 5 的正整数.例如, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 就是前10个丑数.注意:1. 1 一般也被当做丑数2. ...
- 313 Super Ugly Number 超级丑数
编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...
- Leetcode264. Ugly Number II丑数2
编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 ...
- [LeetCode]313. Super Ugly Number超级丑数,丑数系列看这一道就行了
丑数系列的题看这一道就可以了 /* 和ugly number2差不多,不过这次的质因子多了,所以用数组来表示质因子的target坐标 target坐标指的是这个质因子此次要乘的前任丑数是谁 */ pu ...
- LeetCode OJ 之 Ugly Number (丑数)
题目: Write a program to check whether a given number is an ugly number. Ugly numbers are positive num ...
随机推荐
- entity framework extended library , bulk execute,deleting and updating ,opensource
http://weblogs.asp.net/pwelter34/entity-framework-batch-update-and-future-queries
- <五> jQuery 效果
显示隐藏 $("selector").show(speed, callback) $("selector").hide"(speed, callbac ...
- Android Learning:微信第三方登录
这两天,解决了微信第三方授权登录的问题,作为一个新手,想想也是一把辛酸泪.我想着,就把我的遇到的坑给大家分享一下,避免新手遇到我这样的问题能够顺利避开. 步骤一 微信开发者平台 我开始的解决思路是,去 ...
- tomcat 7 下添加 shared/lib 文件夹
你打开tomcat7\conf\catalina.properties文件再打开tomcat5的,看完后, 你就知道了 tomcat 5.5.35 # # List of comma-separate ...
- [转载]C#读写配置文件(XML文件)
.xml文件格式如下 [xhtml] view plaincopy <?xml version="1.0" encoding="utf-8"?> & ...
- [状压dp]POJ2686 Traveling by Stagecoach
题意: m个城市, n张车票, 每张车票$t_i$匹马, 每张车票可以沿某条道路到相邻城市, 花费是路的长度除以马的数量. 求a到b的最小花费, 不能到达输出Impossible $1\le n\le ...
- RAM云存储已经出现了,就是特别贵
据说bat有这种全内存的服务器集群, RAM的问题是,容量上去了就会很费电,而且不方便做持久化,并且成本也不低,一般只能作为缓存.内存数据库,给bat.12306这种高富帅用 也有提供内存云存储的服务 ...
- 【HDOJ】3275 Light
这就是个简单线段树+延迟标记.因为对bool使用了~而不是!,wa了一下午找不到原因. /* 3275 */ #include <iostream> #include <sstrea ...
- Hibernate一级缓存、二级缓存
缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中,准确说就是一个数据结构中,这个数据结构通常是或类似HashMap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对 ...
- URAL1009
链接 第一道URAL题 简单递推 #include <iostream> #include<cstdio> #include<cstring> #include&l ...

