51nod 1435 位数阶乘 (手动计算)
题目:
1435 位数阶乘
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
X是一个n位数的正整数 (x=a0a1…an−1)
现在定义 F(x)=∏i=0n−1(ai!) , 比如F(135)=1!*3!*5!=720.
我们给定一个n位数的整数X(至少有一位数大于1,X中可能有前导0),
然后我们去找一个正整数(s)符合以下条件:
1.这个数尽可能大,
2.这个数中不能含有数字0或1。
3.F(s)=F(x)
Input
每个测试数据输入共2行。
第一行给出一个n,表示x为中数字的个数。(1<=n<=15)
第二行给出n位数的正整数X(X中至少有一位数大于1)
Output
共一行,表示符合上述条件的最大值。
Input示例
4
1234
Output示例33222
这题纯手动解决,以为有规律,发现数字大了就没规律了。
解法:把15个9以内的阶乘分解成尽量多的2-9的阶乘。然后从大的数开始输出。
这题不管怎么分都是要从最大的素数因子开始的,要不然就不能分解。
我们能够想到的是2,3,5,7是没法再分小了的。 (想想7!怎么分,第一个7就没法分)
所以只有4,6,8,9四个数字的阶乘要分,
4分为:1个3!和2个2! 6分为:1个5!和1个3!
8分为:1个7!和3个2!
9分为:1个7!和2个3!和1个2!
这题就是这么暴力。
我刚开始以为任何大于1的自然数的阶乘都可以分成 任意个质数阶乘的积。
后来找到了反例(100! = 97!*98*99*100),分出来的3个数字没法拼成素数阶乘的积。
代码:
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <set>
#include <math.h>
using namespace std;
typedef long long ll;
#define INF 2147483647//num[i] 表示 i! 的数量
int num[11]; int main(){int n;string s;cin >> n >> s;for(int i = 0;s[i]; i++){if(s[i] == '9'){//9!可以分为 7!* (2*3!) * 2!。 num[7]++; num[3] += 2; num[2]++; }else if(s[i] == '8'){//8! 可以分为 7!* (3*2!) num[7]++; num[2] += 3;}else if(s[i] == '6'){//6! 可以分为 5! * 3! num[5]++; num[3]++;}else if(s[i] == '4'){//4! 可以分为3! * (2*2!) num[3]++; num[2] += 2;}else{//质数的阶乘不可分 num[s[i]-'0']++;}}for(int i = 9;i >= 2; i--){ while(num[i]--) cout << i;}cout << endl;return 0;
}
51nod 1435 位数阶乘 (手动计算)相关推荐
- 51nod 1435 位数阶乘
1435 位数阶乘 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 X是一个n位数的正整数 (x=a0a1...a ...
- pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决
pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...
- java PageUtil + stream 手动计算List 分页
交代一下前言,数据是redis中查询 140,193,88,117 格式大概是这样. 需要切割为long类型的list数组.需要手动计算分页,去mongodb中查询数据. 这里我用的手动计算分页的是 ...
- 【机器学习】逻辑斯蒂回归概率计算和手动计算对比
二分类,逻辑斯蒂回归概率计算 import numpy as np from sklearn import datasets from sklearn.linear_model import Logi ...
- java数字计算结果_Java编写程序之输入一个数字实现该数字阶乘的计算
需求说明: 编写Java程序,输入一个数字,实现该数字阶乘的计算.一个数字的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! .例如,5的阶乘等于1*2*3*4*5,表示为5! = 120 ...
- 手动计算Q-Learning的一个实例
此篇文接上篇 为了更好的理解Q-Learning算法是如何工作的,我们一步步手动计算一些过程. 我们把γ的值设为0.8,初始状态在房间1中. 把Q矩阵初始化为0 让我们看一下R矩阵的第二行(状态1), ...
- R语言手动计算主成分分析(PCA)及其在R函数的实现
R语言手动计算主成分分析(PCA)及其在R函数的实现 了解PCA的原理,但总是无法用R语言实现,这次算是有个教程. 转自:http://blog.163.com/xiaoji0106@126/blog ...
- 关于阶乘的计算出现负数,数据溢出的问题
关于阶乘的计算,数据溢出的问题 当我们计算阶乘的时候,一般是想计算整数的阶乘,我们习惯性的会将函数参数设置为(int64)类型.函数定义如下: func jc(n int64) int64 {if n ...
- Excel:一个Excel自动计算公式,一个Excel手动计算?多进程
需求: 其实这篇文章并不是要描述多么高深的技巧. 只是想把问题描述地清楚一些. 开了多个Excel,希望其中一些Excel的公式自动计算,一些Excel的公式手动计算.不然计算量特别大,电脑会很卡. ...
最新文章
- python程序间通信,python 实现 socket 进程间通信
- 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
- 人的效率还是机器的效率?
- XFBAY学习笔记=++=实验十三 交换机和路由器组合实验
- PLC梯形图编程基础知识详解(转自:http://gongkong.ofweek.com/2014-09/ART-310012-11000-28882866_2.html)
- 使用PostMan调试webService接口
- 【工具】idea去掉UML类图的虚线箭头(依赖关系)
- vi编辑器 末尾添加_linux下的VI编辑器使用手册
- C++中圆周率Π的几种表示方法arccos(-1), 2arcsin(1), 4arctan(1)的用法
- 脱口而出的 “ 感谢的语言 ”
- esxi 7.0 封装瑞昱网卡驱动_虚拟机(ESXi)下硬盘性能的探索
- Mac 技术篇-搜狗输入法英文首字母自动大小写设置,mac系统首字母自动大小写设置
- 电商直播元年 微媒云播打造私域流量火爆商业新模式
- Html5调用手机摄像头并实现人脸识别
- 13个可以激励自己的名言
- VR眼镜全国产化电子元件推荐方案
- 加密市场中的14个心智模型
- 华为云开天aPaaS服务全球落地,聚力并蓄不断创新,共建生态网络
- 实验五、异常处理与I/O操作
- 教材练习-计算存款5年的利息
热门文章
- css不常用,不常用的 CSS
- python获取qq好友ip_qqzeng-ip.dat IP库读取python版
- 940mx黑苹果驱动_专业黑苹果系统安装 win macos双系统10.13/14/15
- Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出
- linux系统分区不,其中,不属于Linux系统分区的是()。
- 防沉迷人脸识别可以扫照片吗_人脸识别的智能门锁到底安不安全?用照片可以打开是真的吗?...
- 坚持是一件很难的事情
- Jmeter基础(二)
- win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
- ACM OJ反馈结果大全