一个最基本的算数法则就是大于1的整数都能用1个或多个素数相乘的形式表示出来。当然,有多种质因子排列方案

如:

10=2×5=5×2    20=5×2×2=2×5×2=2×2×5

用f(k)表示k的质因数排列数,f(10)=2,f(20)=3

给一个n,至少有一个k满足f(k)=n的最小k

输出格式:n和k

输入:

1

2

3

105

输出:

1 2

2 6

3 12

105 720

数据范围

n,k<2^63

我们令k=∏piei

  S=∑ei

f(k)=S!/(∏ei!)

解释一下:S是所有因数的个数,ei是每一种因数的个数

显然不考虑重复的情况时方案为S!

那么算上重复的会怎样?

1112是已定的

如果是算总方案显然4!,那么111会导致的重复方案是3!2导致的重复方案为1!

所以有了以上结论

那么我们有了一种方法:枚举k得到n

显然不行

那么是否可以试一下已知n,得到k?

已知对于一个指数e,如果在可行条件下,那么它显然优先给最小的质因数,这能导致k最小

搜索+剪枝实现

剪枝1:上面说的优先给小的素数,就是说ei要单调递增,因为如果ei>ej,i>j,那么显然把ei与ej

交换才能最优

剪枝2:假设你每举了t素数的指数e

就要把n除以 ((S-e+1)*...*S) /e!

如何高效算出?

原式=>S!/(e!*(S-e)!)

这不就是C(S,S-e)吗?

预处理出C,然后每一层枚举一个素数的指数,然后向下

剪枝3:最优性剪枝,当前k>ans 则退出

预处理幂不说了

但记住无论是幂,还是k,都不能超过(1<<63)-1

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int pr[]={,,,,,,,,,,,,,,};
long long pw[][],C[][],ans;
long long inf;
long long min(long long a,long long b)
{
if (a<b) return a;
else return b;
}
void dfs(int t,long long now,long long pre,long long s,int down)
{
if (s>ans) return;
if (now==)
{
ans=min(ans,s);
return;
}
if (t>) return;
for (int i=pre+;i<=min(pre+down,);i++)
if (now%C[i][i-pre]==&&pw[t][i-pre]&&s<=inf/pw[t][i-pre])
dfs(t+,now/C[i][i-pre],i,s*pw[t][i-pre],i-pre);
}
void ask_ans(long long k)
{
ans=inf;
dfs(,k,,,);
ans=max(ans,);
}
int main()
{int i,j,k;
freopen("factor.in","r",stdin);
freopen("factor.out","w",stdout);
C[][]=;
for (i=;i<;i++)
{
C[i][]=C[i][i]=;
for (j=;j<i;j++)
C[i][j]=C[i-][j-]+C[i-][j];
}
for (i=;i<=;i++)
{
pw[i][]=;
for (j=;j<=;j++)
{
if (i&&pw[i][j-]>inf/pr[i]) break;
pw[i][j]=pw[i][j-]*pr[i];
}
if (i==)
inf=pw[][]-;
}
while (cin>>k)
{
ask_ans(k);
cout<<k<<' '<<ans<<endl;
}
}

因数(factor)的更多相关文章

  1. [linux]收集一些好玩的命令

    1.rev命令 反转输出,输入的字符串. 在终端中输入:rev 输入需要字符串(支持中文) 2.asciiview命令 安装aview:apt-get install aview 再安装imagema ...

  2. 1049. Counting Ones (30)

    题目如下: The task is simple: given any positive integer N, you are supposed to count the total number o ...

  3. python常用标准库(math数学模块和random随机模块)

    常用的标准库 数学模块 import math ceil -- 上取整 对一个数向上取整(进一法),取相邻最近的两个整数的最大值. import math res = math.ceil(4.1) p ...

  4. 254. Factor Combinations 返回所有因数组合

    [抄题]: Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write ...

  5. The largest prime factor(最大质因数)

    1. 问题: The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number ...

  6. R语言学习——欧拉计划(3)Largest prime factor 求最大质因数

    The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...

  7. 抓其根本(一)(hdu2710 Max Factor 素数 最大公约数 最小公倍数.....)

    素数判断: 一.根据素数定义,该数除了1和它本身以外不再有其他的因数. 详见代码. int prime() { ; i*i<=n; i++) { ) //不是素数 ; //返回1 } ; //是 ...

  8. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

  9. [LeetCode] Factor Combinations 因子组合

    Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a func ...

随机推荐

  1. 【alpha冲刺】随笔合集

    Daily Scrum Meeting 第一天 [Alpha]Daily Scrum Meeting第一次 第二天 [Alpha]Daily Scrum Meeting第二次 第三天 [Alpha]D ...

  2. C语言程序设计(基础)- 第7周作业(新)

    要求一(25经验值) 完成PTA中题目集名为<usth-C语言基础-第七周作业>和<usth-C语言基础-12周PTA作业>中的所有题目. 注意1:<usth-C语言基础 ...

  3. alpha-咸鱼冲刺day2-紫仪

    总汇链接 一,合照 emmmmm.自然是没有的. 二,项目燃尽图 三,项目进展 今天并没有什么进展,弄了好久好像也只研究出怎么把JS的功能块插入进去.html的信息提交这些还不知道要怎么弄. 四,问题 ...

  4. 201621123050 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...

  5. Git使用方法2.0

    ## Git来源: 最早开始是由Ruby程序员们发起的.Ruby是日本的家伙搞出来的,日本有个代码托管网站叫heroku,当时用这个的人比较多,现在这个网站还能打开,网址是www.heroku.com ...

  6. sql with as 用法-Z

    以下内容转自:http:.com/ 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个 ...

  7. servlet线程同步问题-代码实现同步(转)

    从servlet的生命周期中,我们知道,当第一次访问某个servlet后,该servlet的实例就会常驻 内存,以后再次访问该servlet就会访问同一个servlet实例,这样就带来多个用户去访问一 ...

  8. 数据故障的恢复-MSSQL ndf文件大小变为0 KB恢复过程

    一.故障描述 成都某客户,存储损坏,数据库崩溃.重组存储,恢复数据库文件,发现有四个ndf文件大小变为0 KB.数据库大小约80TB.数据库中有1223个文件,数据库每10天生成一个NDF文件,每个N ...

  9. EasyUI导航栏。

    html: <div data-options="region:'west',split:true" title="导航栏菜单" style=" ...

  10. 20165230 2017-2018-2 《Java程序设计》第4周学习总结

    20165230 2017-2018-2 <Java程序设计>第4周学习总结 教材学习内容总结 子类与继承 通过class 子类名 extends 父类名定义子类.子类只能继承一个父类,关 ...