题意:

给你一个数n,你需要输出它可以由那几个数相乘构成,我们设可以由x个数构成,这x个数中最小值为minn,最大值为maxx,那么要求maxx-minn<=1

问你满足上面要求的情况有多少种。如果一个数的构成方式由无数种就输出-1

样例解释:

输入:

12

输出:

3

1 12

3 2 3 2

2 4 3

12有三种满足题意的构成方式,分别是12、2*3*2、4*3

输入

1

输出

-1

因为1的构成可以是1、1*1、1*1*1、1*1*1*1无数种

题解:

你会发现输出-1的情况都是2的次幂,例如1、2、4、8、16.特判一下就可以了

其他情况首先n本身算一次。后面就是两个数相乘得到n,这种情况设定x=sqrt(n)

判断一下x*x==n、x*(x-1)==n、x*(x+1)==n

之后就是多个数相乘(大于两个),n最大是1e18,那么我们枚举1到n1/3的所有数,判断就可以

代码:

  1. #include <algorithm>
  2. #include <cmath>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <ctime>
  7. #include <iostream>
  8. #include <map>
  9. #include <queue>
  10. #include <set>
  11. #include <vector>
  12. using namespace std;
  13. typedef long long ll;
  14. const int maxn = 1e4 + 5;
  15. const int mod = 1000000007;
  16. vector<ll>r[maxn],que;
  17. int main()
  18. {
  19. ll n;
  20. freopen("little.in","r",stdin);
  21. freopen("little.out","w",stdout);
  22. scanf("%lld",&n);
  23. if((n&(-n))==n)
  24. {
  25. printf("-1\n");
  26. return 0;
  27. }
  28. ll pos=0;
  29. //que.push_back(1);
  30. que.push_back(n);
  31. r[pos]=que;
  32. pos++;
  33. que.clear();
  34. for(ll i=2;i*i*i<=n;++i)
  35. {
  36. ll tmp=n;
  37. if(tmp%i==0)
  38. {
  39. while(tmp%i==0)
  40. que.push_back(i),tmp/=i;
  41. while(tmp%(i+1)==0)
  42. que.push_back(i+1),tmp/=(i+1);
  43.  
  44. if(tmp==1)
  45. {
  46. r[pos]=que;
  47. pos++;
  48. }
  49. que.clear();
  50. }
  51. }
  52. ll tmp=sqrt(n);
  53. if(tmp*tmp==n)
  54. {
  55. que.push_back(tmp);
  56. que.push_back(tmp);
  57. r[pos]=que;
  58. pos++;
  59. que.clear();
  60. }
  61. if(tmp*(tmp+1)==n)
  62. {
  63. que.push_back(tmp);
  64. que.push_back(tmp+1);
  65. r[pos]=que;
  66. pos++;
  67. que.clear();
  68. }
  69. if(tmp*(tmp-1)==n)
  70. {
  71. que.push_back(tmp);
  72. que.push_back(tmp-1);
  73. r[pos]=que;
  74. pos++;
  75. que.clear();
  76. }
  77. printf("%lld\n",pos);
  78. for(ll i=0;i<pos;++i)
  79. {
  80. ll len=r[i].size();
  81. printf("%lld ",len);
  82. for(ll j=0;j<len-1;++j)
  83. {
  84. printf("%lld ",r[i][j]);
  85. }
  86. printf("%lld\n",r[i][len-1]);
  87. }
  88. return 0;
  89. }

Little Difference Gym - 101612L 思维的更多相关文章

  1. Gym - 101981E 思维

    Gym - 101981EEva and Euro coins 题意:给你两个长度皆为n的01串s和t,能做的操作是把连续k个相同的字符反转过来,问s串能不能变成t串. 一开始把相同的漏看了,便以为是 ...

  2. Problem D. Berland Railroads Gym - 101967D (思维)

    题目链接:https://cn.vjudge.net/contest/274029#problem/D 题目大意:给你0-9每个数的个数,然后让你找出最大的数,满足的条件是任意三位相连的都能被三整除. ...

  3. Simple Robot Gym - 101102I (思维)

    SaMer is building a simple robot that can move in the four directions: up (^), down (v), left (<) ...

  4. Equal Numbers Gym - 101612E 思维

    题意: 给你n个数vi,你有k次操作.每一次操作你可以从n个数里面挑一个数,然后使得这个数乘于一个正整数.操作完之后,这n个数里面不同数的数量就是权值.你要使得这个值尽可能小. 题解: 如果a%b== ...

  5. Consonant Fencity Gym - 101612C 暴力二进制枚举 Intelligence in Perpendicularia Gym - 101612I 思维

    题意1: 给你一个由小写字母构成的字符串s,你可以其中某些字符变成大写字母.如果s中有字母a,你如果想把a变成大写,那s字符串中的每一个a都要变成A 最后你需要要出来所有的字符对,s[i]和s[i-1 ...

  6. UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)

    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...

  7. 思维题 Gym 100553A Alter Board

    题目传送门 /* 题意:一个n×m的矩形,相邻的颜色不同,黑或白.问最少的翻转次数,每次翻转可指定任意一个子矩形 思维题:最少要把偶数行和列翻转,也就是n/2+m/2次 */ #include < ...

  8. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  9. K - Subarrays OR Gym - 102152K (思维)

    题目链接: K - Subarrays OR Gym - 102152K 题目大意:T组测试样例,然后n个数,让你求每一个l,r中有多少个不同的异或值. 具体思路: 对于(1,i)这个区间, 我们当前 ...

随机推荐

  1. docker搭建前端环境

    开发环境的搭建,是新人入职后的第一道槛,有时一个小小的问题就能阻塞半天.如果能提供一个工具在短时间内搞定开发环境,势必提高新人对团队的印象分!docker就是这样一个工具. 镜像&容器 doc ...

  2. LeetCode105 从前序和中序序列构造二叉树

    题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9 ...

  3. C++中的extern“C”

    首先引入extern"C"的官方解释 extern "C" is meant to be recognized by a C++ compiler and to ...

  4. python面向对象基础-属性/方法

  5. Pandas 常见操作详解

    Pandas 常见操作详解 很多人有误解,总以为Pandas跟熊猫有点关系,跟gui叔创建Python一样觉得Pandas是某某奇葩程序员喜欢熊猫就以此命名,简单介绍一下,Pandas的命名来自于面板 ...

  6. 利用sql_tuning_Advisor调优sql

    1.赋权给调优用户 grant ADVISOR to xxxxxx; 2.创建调优任务 使用sql_text创建 DECLARE my_task_name VARCHAR2 (30); my_sqlt ...

  7. 使用call、apply、bind继承及三者区别

    js里的继承方法有很多,比如:使用原型链的组合继承.es6的Class.寄生继承以及使用call.apply.bind继承.再说继承之前,我们先简单了解下它们的区别. 一.区别: 同:三者都是改变函数 ...

  8. 定制个性化的GUI

    你现在还在使用SAP GUI710或者是GUI720,又或者更早的640等吗?那么古董先生,推荐您使用GUI730吧,您可能会730好在哪?那我建议您去百度或者Google问吧.对于新的GUI730, ...

  9. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

  10. Vue使用Ref跨层级获取组件实例

    目录 Vue使用Ref跨层级获取组件实例 示例介绍 文档目录结构 安装vue-ref 根组件自定义方法[使用provide和inject] 分别说明各个页面 结果 Vue使用Ref跨层级获取组件实例 ...