数学吧 关注:947,492贴子:9,483,908
  • 2回复贴,共1

自由发挥一个对一个5维数组坐变换

取消只看楼主收藏回复

自由发挥一个对一个5维数组坐变换
我有一个5重循环的穷举任务,每一重的循环长度是a,b,c,d,e, 那么总计算量是这5个数之积
如果这个积太大,比如超过1亿,那么我会等得很不耐烦,需要减少个别循环计算量(偷工减料 嘿嘿),
请您自由构思一个函数f(x),这个函数的参数会与a,b,c,d,e有关
单调增函数,表达式尽量简洁,不要用排序算法对这5个数排序
对于较小的正整数x,f(x)=x
对于较大的正整数x,f(x)<=x
abcde>1亿,且f(a)f(b)f(c)f(d)f(e)小于并且很接近1亿
不要反问我各种古怪问题,自由发挥自由发挥
举个例子,17,35,67,59,55 ,这5个数的积超过1亿了,我就会用这个f(x)变换这些数字
比如变成 17,35,56,55,54 ,这时它们的积是9千万了


IP属地:广东1楼2022-05-12 19:07回复
    有无更多思路


    IP属地:广东4楼2022-05-13 20:03
    回复
      2026-07-25 02:37:21
      广告
      不感兴趣
      开通SVIP免广告
      抛砖引玉一下
      待定一个数m, 当某变量大于m时把该变量修改为m,否则不变
      所以 本质问题该是寻找m使得 min(a,m)min(b,m)min(c,m)min(d,m)min(e,m)尽量接近1亿
      可是这个m的表达式嘛,因为要沉迷学习和游戏,我还没仔细想过是怎样的,有无优雅的表达式,所以向数学吧伸手找灵感的同时,在程序里则直接硬搜,比如像这样做:
      var a=10,b=10,c=20,d=289,e=314
      var m=Math.max(e,Math.max(d,Math.max(c,Math.max(a,b))))
      while(a*b*c*d*e>=100000000){
      a=Math.min(a,m)
      b=Math.min(b,m)
      c=Math.min(c,m)
      d=Math.min(d,m)
      e=Math.min(e,m)
      m--
      }
      [m, a*b*c*d*e ] //输出222,99458000


      IP属地:广东7楼2022-05-14 12:39
      收起回复