题目:

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 位数阶乘 (手动计算)相关推荐

  1. 51nod 1435 位数阶乘

    1435 位数阶乘 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 X是一个n位数的正整数 (x=a0a1...a ...

  2. pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决

    pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...

  3. java PageUtil + stream 手动计算List 分页

    交代一下前言,数据是redis中查询 140,193,88,117 格式大概是这样. 需要切割为long类型的list数组.需要手动计算分页,去mongodb中查询数据. 这里我用的手动计算分页的是  ...

  4. 【机器学习】逻辑斯蒂回归概率计算和手动计算对比

    二分类,逻辑斯蒂回归概率计算 import numpy as np from sklearn import datasets from sklearn.linear_model import Logi ...

  5. java数字计算结果_Java编写程序之输入一个数字实现该数字阶乘的计算

    需求说明: 编写Java程序,输入一个数字,实现该数字阶乘的计算.一个数字的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! .例如,5的阶乘等于1*2*3*4*5,表示为5! = 120 ...

  6. 手动计算Q-Learning的一个实例

    此篇文接上篇 为了更好的理解Q-Learning算法是如何工作的,我们一步步手动计算一些过程. 我们把γ的值设为0.8,初始状态在房间1中. 把Q矩阵初始化为0 让我们看一下R矩阵的第二行(状态1), ...

  7. R语言手动计算主成分分析(PCA)及其在R函数的实现

    R语言手动计算主成分分析(PCA)及其在R函数的实现 了解PCA的原理,但总是无法用R语言实现,这次算是有个教程. 转自:http://blog.163.com/xiaoji0106@126/blog ...

  8. 关于阶乘的计算出现负数,数据溢出的问题

    关于阶乘的计算,数据溢出的问题 当我们计算阶乘的时候,一般是想计算整数的阶乘,我们习惯性的会将函数参数设置为(int64)类型.函数定义如下: func jc(n int64) int64 {if n ...

  9. Excel:一个Excel自动计算公式,一个Excel手动计算?多进程

    需求: 其实这篇文章并不是要描述多么高深的技巧. 只是想把问题描述地清楚一些. 开了多个Excel,希望其中一些Excel的公式自动计算,一些Excel的公式手动计算.不然计算量特别大,电脑会很卡. ...

最新文章

  1. python程序间通信,python 实现 socket 进程间通信
  2. 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
  3. 人的效率还是机器的效率?
  4. XFBAY学习笔记=++=实验十三 交换机和路由器组合实验
  5. PLC梯形图编程基础知识详解(转自:http://gongkong.ofweek.com/2014-09/ART-310012-11000-28882866_2.html)
  6. 使用PostMan调试webService接口
  7. 【工具】idea去掉UML类图的虚线箭头(依赖关系)
  8. vi编辑器 末尾添加_linux下的VI编辑器使用手册
  9. C++中圆周率Π的几种表示方法arccos(-1), 2arcsin(1), 4arctan(1)的用法
  10. 脱口而出的 “ 感谢的语言 ”
  11. esxi 7.0 封装瑞昱网卡驱动_虚拟机(ESXi)下硬盘性能的探索
  12. Mac 技术篇-搜狗输入法英文首字母自动大小写设置,mac系统首字母自动大小写设置
  13. 电商直播元年 微媒云播打造私域流量火爆商业新模式
  14. Html5调用手机摄像头并实现人脸识别
  15. 13个可以激励自己的名言
  16. VR眼镜全国产化电子元件推荐方案
  17. 加密市场中的14个心智模型
  18. 华为云开天aPaaS服务全球落地,聚力并蓄不断创新,共建生态网络
  19. 实验五、异常处理与I/O操作
  20. 教材练习-计算存款5年的利息

热门文章

  1. css不常用,不常用的 CSS
  2. python获取qq好友ip_qqzeng-ip.dat IP库读取python版
  3. 940mx黑苹果驱动_专业黑苹果系统安装 win macos双系统10.13/14/15
  4. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出
  5. linux系统分区不,其中,不属于Linux系统分区的是()。
  6. 防沉迷人脸识别可以扫照片吗_人脸识别的智能门锁到底安不安全?用照片可以打开是真的吗?...
  7. 坚持是一件很难的事情
  8. Jmeter基础(二)
  9. win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
  10. ACM OJ反馈结果大全