有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数

public static int removeMin(Queue<Integer> q)
{
int min=q.peek();
for(Integer v:q)
{
if(min>v)
min=v;
}
while(q.contains(min))
{
q.remove(min);
}
return min;
}
public static void  addProducts(Queue<Integer> q,int v)
{
q.add(v*3);
q.add(v*5);
q.add(v*7);
}
public static int getKthMagicNumber(int k)
{
if(k<0) return 0;
int val=1;
Queue<Integer> q=new LinkedList<Integer>();
addProducts(q,1);
for(int i=0;i<k;i++)
{
val=removeMin(q);
addProducts(q,val);
}
return val;
}


public static int getKthMagicNumber(int k)
{
if(k<0)
{
return 0;
}
int val=0;
Queue<Integer> queue3=new LinkedList<Integer>();
Queue<Integer> queue5=new LinkedList<Integer>();
Queue<Integer> queue7=new LinkedList<Integer>();
queue3.add(1);
//从0到K的迭代
for(int i=0;i<=k;i++)
{
int v3=queue3.size()>0?queue3.peek():Integer.MAX_VALUE;
int v5=queue5.size()>0?queue5.peek():Integer.MAX_VALUE;
int v7=queue7.size()>0?queue7.peek():Integer.MAX_VALUE;
val=Math.min(v3,Math.min(v5,v7));
if(val==v3)
{
queue3.remove();
queue3.add(3*val);
queue5.add(5*val);
}
else if(val==v5)
{
queue5.remove();
queue5.add(5*val);
}
else if(val==v7)
{
queue7.remove();
}
queue7.add(7*val);//总是放入队列7
}
return val;
}



  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
培养基优化 培养基优化,是指面对特定的微生物,通过实验手段配比和筛选找到一种最适合其生长及发酵的培养基,在原来的基础上提高发酵产物的产量,以期达到生产最大发酵产物的目的。发酵培养基的优化在微生物产业化生产中举足轻重,是从实验室到工业生产的必要环节。能否设计一个好的发酵培养基,是一个发酵产品工业化成功中非常重要的一步。 目录 1试验设计 单因法 正交实验设计 均匀设计因子实验设计 部分因子设计 Plackett-Burman设计 中心组合设计 Box–Behnken设计 2技术实验统计 响应曲面分析法 改进单纯形优化法 遗传算法 培养基优化试验设计 在工业化发酵生产中,发酵培养基的设计是十分重要的,因为培养基的成分对产物浓度、菌体生长都有重要的影响。实验设计方法发展至今可供人们根据实验需要来选择的余地也很大。 培养基优化单因法 单因方法(One at a time)的基本原理是保持培养基中其他所有组分的浓度不变,每次只研究一个组分的不同水平对发酵性能的影响。这种策略的优点是简单、容易,结果很明了,培养基组分的个体效应从图表上很明显地看出来,而不需要统计分析。这种策略的主要缺点是:忽略了组分间的交互作用,可能会完全丢失最适宜的条件;不能考察因的主次关系;当考察的实验因较多时,需要大量的实验和较长的实验周期。但由于它的容易和方便,单因方法一直以来都是培养基组分优化的最流行的选择之一。 培养基优化正交实验设计 试验优化设计方案全文共3页,当前为第1页。正交设计(Orthogonal design)就是从"均匀分散、整齐可比"的角度出发,是以拉丁方理论和群论为基础,用正交表来安排少量的试验,从多个因中分析出哪些是主要的,哪些是次要的,以及它们对实验的影响规律,从而找出较优的工艺条件。石炳兴等利用正交实验设计优化了新型抗生AGPM 的发酵培养基,结果在优化后的培养基上单位发酵液的活性比初始培养基提高了18.9倍。正交实验不能在给出的整个区域上找到因和响应值之间的一个明确的函表达式即回归方程,从而无法找到整个区域上因的最佳组合和响应值的最优值。而且对于多因多水平试验,仍需要做大量的试验,实施起来比较困难。 试验优化设计方案全文共3页,当前为第1页。 培养基优化均匀设计 均匀设计 (Uniform design)是我国学家方开泰等独创的将论与多元统计相结合而建立起来的一种试验方法。这一成果已在我国许多行业中取得了重大成果。均匀设计最适合于多因多水平试验,可使试验处理目减小到最小程度,仅等于因水平个数。虽然均匀设计节省了大量的试验处理,但仍能反映事物变化的主要规律。 培养基优化全因子实验设计 在全因子设计(Full factorial design)中各因的不同水平间的各种组合都将被实验。全因子的全面性导致需要大量的试验次。一般利用全因子设计对培养基进行优化实验都为两水平,是能反映因间交互作用(排斥或协同效应)的最小设计。全因子试验次的简单算法为(以两因为例):两因设计表示为 a ×b,第一个研究为a个水平,第二个因为b个水平。Thiel等试验了两个因:7个菌株在8种培养基上,利用7 ×8(56个不同重复)。Prapulla等试验了三个因:碳源(糖蜜4%,6%,8%,10%,12%),氮源(NH4NO3 0g/L、0.13g/L、0.26g/L、0.39g/L、0.52g/L、)和接种量(10%、20%),利用5 × 5 × 2设计(50个不同重复)。 培养基优化部分因子设计 当全因子设计(fractional factorial design)所需试验次实际不可行时部分重复因子设计一个很好的选择。在培养基优化中经常利用二水平部分因子设计,但也有特殊情况,如Silveira 等试验了11种培养基成分,每成分三水平,仅做了27组实验,只是311全因子设计177147组当中的很小一部分。两水平部分因子设计表示为:2n–k,n是因子目,1/2k 是实施全因子设计的分。这些符号告诉你需要多少次试验。虽然通常部分因子设计没有提供因的交互作用,但它的效果比单因试验更好。 培养基优化Plackett-Burman设计 由Plackett 和Burman (Plackett-Burman design)提出,这类设计是两水平部分因子试验,适用于从众多的考察因中快速、有效的筛选出最为重要的几个因,供进一步详细研究用。理论上讲PB试验应该应用在因子存在累加效应,没有交互作用—因子的效应可以被其他因子所提高或削弱的试验上。实际上,倘若因子水平选择恰当,设计可以得到有用的结果。Castro等利用PB试验对培养基中的20种组分仅进行了24次试验,使γ-干扰的产量提高了近45%。 培养基优化
本书是国际算法大师乌迪·曼博(Udi Manber)博士撰写的一本享有盛誉的著作。全书共分12章:第1章到第4章为介绍性内容,涉及学归纳法、算法分析、据结构等内容;第5章提出了与归纳证明进行类比的算法设计思想;第6章到第9章分别给出了4个领域的算法,如序列和集合的算法、图算法、几何算法、代算法;第10章涉及归约,也是第11章的序幕,而后者涉及NP完全问题;第12章则介绍了并行算法;最后是部分习题的答案及参考文献。本书的特色有二,旨在提高读者的问题求解能力,使读者能够理解算法设计的过程和思想:一是强调算法设计的创造性过程,注重算法设计背后的创造性思想,而不拘泥于某个具体算法的详细讨论;二是将算法设计类比于定理归纳证明,揭示了算法设计的基本思想和本质。 本书的组织结构清晰且易于理解,强调了创造性,具有浓郁特色,时至今日仍有其巨大的价值,并且适合作为计算机及相关专业算法和高级算法课程的教材。 第1章 引论 第2章 学归纳法 2.1 引言 2.2 三个简单的例子 2.3 平面内区域的计 2.4 简单的着色问题 2.5 复杂一些的加法题 2.6 一个简单的不等式 2.7 欧拉公式 2.8 图论中的一个问题 2.9 格雷码 2.10 在图上寻找无重边的路 2.11 学平均和几何平均定理 2.12 循环不变量:将十进制转换为二进制 2.13 常见的错误 2.14 小结 第3章 算法分析 3.1 引言 3.2 符号O 3.3 时间与空间复杂度 3.4 求和 3.5 递推关系 3.5.1 巧妙地猜测 3.5.2 分治关系 3.5.3 涉及全部历史的递推关系 3.6 一些有用的证明论据 3.7 小结 第4章 据结构简介 4.1 引言 4.2 基本据结构 4.2.1 元 4.2.2 组 4.2.3 记录 4.2.4 链表 4.3 树 4.3.1 树的表示 4.3.2 堆 4.3.3 二叉搜索树 4.3.4 AVL树 4.4 散列 4.5 合并?查找问题 4.6 图 4.7 小结 第5章 基于归纳的算法设计 5.1 引言 5.2 多项式求值 5.3 最大导出子图 5.4 寻找一对一映射 5.5 社会名流问题 5.6 分治算法:轮廓问题 5.7 在二叉树中计算平衡因子 5.8 寻找最大连续子序列 5.9 增强归纳假设 5.10 动态规划:背包问题 5.11 常见的错误 5.12 小结 第6章 序列和集合的算法 6.1 引言 6.2 二叉搜索的几种形式 6.2.1 纯二叉搜索 6.2.2 循环序列的二叉搜索 6.2.3 二叉搜索特殊下标 6.2.4 二叉搜索长度未知的序列 6.2.5 重叠子序列问题 6.2.6 解方程 6.3 内插搜索 6.4 排序 6.4.1 桶排序和基排序 6.4.2 插入排序和选择排序 6.4.3 归并排序 6.4.4 快速排序 6.4.5 堆排序 6.4.6 排序问题的下界 6.5 顺序统计 6.5.1 最大和最小 6.5.2 查找第k小的 6.6 据压缩 6.7 串匹配 6.8 序列比较 6.9 概率算法 6.9.1 随机 6.9.2 着色问题 6.9.3 将拉斯维加斯算法变换成确定性算法 6.10 查找众 6.11 三个展现有趣证明方法的问题 6.11.1 最长递增序列 6.11.2 查找集合中两个最大的元 6.11.3 计算多重集合的模 6.12 小结 第7章 图算法 7.1 引言 7.2 欧拉图 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 拓扑排序 7.5 单源最短路径 7.6 最小代价生成树 7.7 全部最短路径 7.8 传递闭包 7.9 图的分解 7.9.1 双连通分支 7.9.2 强连通分支 7.9.3 利用图分解的例子 7.10 匹配 7.10.1 非常稠密图中的完美匹配 7.10.2 偶图匹配 7.11 网络流量 7.12 哈密尔顿旅行 7.12.1 反向归纳 7.12.2 在非常稠密图中找哈密尔顿回路 7.13 小结 第8章 几何算法 8.1 引言 8.2 判定点是否在多边形内部 8.3 构造简单多边形 8.4 凸包 8.4.1 直接方法 8.4.2 礼品包裹算法 8.4.3 Graham扫描算法 8.5 最近点对 8.6 水平线段和竖直线段的交点 8.7 小结 第9章 代算法 9.1 引言 9.2 求幂运算 9.3 欧几里得算法 9.4 多项式乘法 9.5 矩阵乘法 9.5.1 Winograd算法 9.5.2 Strassen算法 9.5.3 布尔矩阵 9.6 快速傅里叶变换 9.7 小结 第10章 归约 10.1 引言 10.2 归约的例子 10.2.1 简单字符串匹配问题 10.2.2 特殊代表集 10.2.3 关于序列比较的归约 10.2.4 在无向图中寻找三角形 10.3 有关线性规划的归约 10.3.1 概述与定义 10.3.2 归约到线性规划的例子 10.4 下界的归约 10.4.1 寻找简单多边形算法复杂度的下界 10.4.2 关于矩阵的简单归约 10.5 常见的错误 10.6 小结 第11章 NP完全问题 11.1 引言 11.2 多项式时间归约 11.3 非确定性和Cook定理 11.4 NP完全性的证明例子 11.4.1 顶点覆盖问题 11.4.2 支配集问题 11.4.3 3SAT问题 11.4.4 团问题 11.4.5 3着色问题 11.4.6 一般经验 11.4.7 更多的NP完全问题 11.5 处理NP完全问题的技术 11.5.1 回溯法和分枝限界法 11.5.2 确保性能的近似算法 11.6 小结 第12章 并行算法 12.1 引言 12.2 并行计算模型 12.3 共享存储器算法 12.3.1 并行加 12.3.2 寻找最大算法 12.3.3 并行前缀问题 12.3.4 在链表中查寻秩 12.3.5 欧拉遍历技术 12.4 互连网络上的算法 12.4.1 阵列上的排序 12.4.2 排序网络 12.4.3 在树中查找第k个最小元 12.4.4 网孔上的矩阵乘法 12.4.5 超立方体中的路由 12.5 脉动计算 12.5.1 矩阵与向量相乘 12.5.2 卷积问题 12.5.3 序列的比较 12.6 小结 部分习题答案 参考文献
### 回答1: 所谓完就是该恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整m和n之间的所有完。 输入格式:输入在一行中给出2个正整m和n(1<m≤n≤10000),中间以空格分隔。 输出格式:逐行输出给定范围内每个完因子累加形式的分解式,每个完占一行,格式为“完 = 因子1 + 因子2 + ... + 因子k”,其中完因子均按递增顺序给出。若区间内没有完,则输出“none”。 ### 回答2: 完是指一个恰好等于除自身外的因子之和,本题要求找出任意两个正整m和n之间的所有完,并输出因子累加形式的分解式。 算法思路: 1. 遍历从m到n之间的每个正整num。 2. 用一个变量sum记录num的因子之和。 3. 对于num,从1到num的平方根sqrt(num)遍历,如果i可以整除num,则将num/i和i加到sum中。 4. 如果sum等于num,则num是一个,输出num和它的因子即可。 5. 如果在给定范围内没有完,则输出”none“。 代码实现: C++ 代码如下: ### 回答3: 完是指一个恰好等于它的所有因子之和的,例如6=1+2+3,所以6是一个。现在需要编写一个程序来找出任意范围内的所有完。 输入的据包含两个正整m和n,它们表示要查找的完的范围,满足1<m≤n≤10000。要求找出m和n之间的所有完,并按照递增的顺序输出它们的因子累加形式的分解式。 解决这个问题的方法可以使用循环来判断每个数是否是完。具体来说,对于每个数x,可以从1到x-1循环遍历所有的因子,将所有的因子相加,如果相加的结果等于x,那么就说明x是一个。 对于m到n范围内的每个数,都可以使用上述方法来判断是否是完,如果是,那么就将其因子和打印出来。因为题目要求输出格式是按照递增顺序给出,所以在循环里需要将每个完因子保存下来,排序后再进行输出。 代码如下: ``` #include <stdio.h> #include <stdlib.h> int factors[100]; // 保存因子组 // 判断一个是否为完 int isPerfectNumber(int num) { int i, sum = 1, cnt = 0; for (i = 2; i < num; i++) { if (num % i == 0) { // 如果是因子 sum += i; // 累加因子 factors[cnt++] = i; // 保存因子 } } return sum == num; // 判断是否为完 } int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int main() { int m, n, i, j; scanf("%d %d", &m, &n); int count = 0; // 计器,记录完个数 for (i = m; i <= n; i++) { if (isPerfectNumber(i)) { // 如果是完 count++; // 计 printf("%d = 1", i); for (j = 0; j < cnt; j++) { // 输出因子 printf(" + %d", factors[j]); } putchar('\n'); } } if (count == 0) { // 如果没有完 printf("none\n"); } return 0; } ``` 这个程序使用一个factors组来保存每个完因子,cnt变量用来记录因子个数,它们的初始化如下: ``` int sum = 1, cnt = 0; ``` 每次循环中,如果当前的i是num的因子,那么就累加到sum中,同时将i保存到factors组中: ``` if (num % i == 0) { // 如果是因子 sum += i; // 累加因子 factors[cnt++] = i; // 保存因子 } ``` 最后判断sum是否等于num来确定num是否为完。 对于输出完因子累加形式的分解式,可以使用循环来依次输出factors组中的每个元因子)。 最后是排序和输出的部分,因为要按递增顺序输出,所以可以使用标准库函`qsort()`进行排序: ``` qsort(factors, cnt, sizeof(int), cmp); ``` 这个函的前面三个参分别是要排序的组、组中元个数和每个元的大小,最后一个是排序时使用的比较函。 比较函的作用是告诉`qsort()`函如何比较两个元的大小关系。我们可以使用如下的比较函: ``` int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } ``` 这个函的返回值为: - 若*a > *b,返回正整 - 若*a == *b,返回0 - 若*a < *b,返回负整 根据这个函的比较结果,`qsort()`函可以将组中的元按照从小到大的顺序排序。 在排序后,可以使用循环依次输出factors组中的每个元,从而输出完因子。 完整代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值