zoukankan      html  css  js  c++  java
  • 小三学算术

    题目描述

    小三的三分球总是很准的,但对于数学问题就完全没有想法了。他希望你来帮他解决下面的这个问题:对于给定的n,从1!、2!、3!、...、n!中至少删去几个数,才可以使剩下的数的乘积为完全平方数?

    输入

    仅一行,包含一个整数n(1≤n≤500)。

    输出

    第一行包含一个整数k,表示最少需要删去的数字个数。
    接下来一行,从小到大排列的k个[1,n]之间的整数,给出删数的方案。如果方案不止一种,输出方案从小到大排序序列最小的一组即可。

    样例输入

    5
    

    样例输出

    2
    2 5

    提示

    去掉2!和5!,剩下的是4!,3!和1!,它们的乘积为4! * 3! * 1!= 24 * 6 = 144

     

    分析:数学一本通上一本非常神的题.先对每个数分解质因数,如果一个数是完全数,那么它的所有质因子的次数一定要是偶数,这样的话很难操作,没有什么特别好的方法.尝试搜索,因为不知道要删掉几个数,可以用迭代深搜,可能会惊奇地发现自己过了,因为这道题有一个结论:答案不超过3.

    先把阶乘两两分组,(1*2!)*(3!*4!)*(5!*6!)......每一组前面的数会被后面的数所覆盖,这些数的质因子的次数一定是偶数,那么把每一组对答案有影响的数给提出来:2*4*6*......再提一个2出来:2*(1*2*3*......)=2!*(n/2)!那么删掉这两个阶乘就好了.这是n为偶数的情况,如果n为奇数,那么就把最后单独的那一个给删掉,然后就变成了偶数的情况,所以最多删3个数.

  • 相关阅读:
    linux下配置java环境
    CentOS6 配置静态IP
    数据库的事务
    MySQL总论
    JDBC面试题
    scp命令
    大数据练习题
    Linux下的Mysql安装 & 配置
    Hive的安装配置 & 基础指令
    本地存储localStorage以及它的封装接口store.js的使用
  • 原文地址:https://www.cnblogs.com/Accpted/p/11371385.html
Copyright © 2011-2022 走看看