1. 1

  1. #define _CRT_SECURE_NO_WARNINGS 1//jerry99的数列
  2. 2 #include<bits/stdc++.h>
  3. 3 int prime[40000] = { 0 };
  4. 4 int pri[6000] = { 0 };
  5. 5 int nums[3000] = { 0 };
  6. 6 int mem[3000] = { 0 };
  7. 7 int jiecheng[40000*1000] = { 0 };
  8. 8 void pre() {//标记质数1~50000
  9. 9 prime[0] = prime[1] = 1;
  10. 10 for (int i = 2; i < 40000; i++) {
  11. 11 for (int j = 2 * i; j < 40000; j += i) {
  12. 12 prime[j] = 1;
  13. 13 }
  14. 14 }
  15. 15 int k = 0;
  16. 16 for (int i = 0; i < 40000; i++) {
  17. 17 if (!prime[i])
  18. 18 pri[k++] = i;//存放在num数组里备用
  19. 19 }
  20. 20 }
  21. 21
  22. 22
  23. 23 int div2(int n) {
  24. 24 memset(mem, 0, 6000);
  25. 25 int k = 0, d, num = 0, origin = n;
  26. 26 for (int i = 0; n != 1; i++) {
  27. 27 d = pri[i];
  28. 28 while (n % d == 0) {
  29. 29 mem[k]++;
  30. 30 n /= d;
  31. 31 }
  32. 32 k++;
  33. 33 if (k >= 5133&&n>50000) return 1;
  34. 34 }
  35. 35 return 0;
  36. 36 }
  37. 37 int main() {
  38. 38 pre();//筛出质数
  39. 39 //提前分解好1~20000阶乘质因数
  40. 40
  41. 41
  42. 42 int t, n, m;
  43. 43 for (n = 1; n < 40000; n++) {
  44. 44 int k = 0, d, num = 0, origin = n;
  45. 45 for (int i = 0; pri[i]<=n; i++) {
  46. 46 d = pri[i];
  47. 47 while (origin != 1&&origin%d==0) {
  48. 48 nums[k]++;
  49. 49 origin /= d;
  50. 50 }
  51. 51 k++;
  52. 52 }
  53. 53 for (int p = 0; p < k; p++) {
  54. 54 *(jiecheng+1000*n+p) += (*(jiecheng+1000*(n-1)+p)+ nums[p]);//递推地计算质因数分解结果
  55. 55 //printf("%d ", jiecheng[n][p]);//数组一维化
  56. 56 }//printf("\n");
  57. 57 memset(nums, 0, 3000*4);
  58. 58 }
  59. 59 for (int i = 1; i < 10; i++) {
  60. 60 for (int j = 0; j < 10; j++) {
  61. 61 printf("%d ", jiecheng[i][j]);
  62. 62 }printf("\n");
  63. 63 }
  64. 64 scanf("%d", &t);
  65. 65 int judge;
  66. 66 while (t > 0) {
  67. 67 memset(mem, 0, 3000*4);
  68. 68 scanf("%d%d", &n, &m);//n分母,m分子
  69. 69 judge = div2(n);//把分母质因数分解
  70. 70
  71. 71 if (judge&&n>40000) {//如果n分解后的质因数是个超级大(>50000)的质数
  72. 72 if (m < n) printf("0\n");
  73. 73 else {
  74. 74 printf("%d\n", m - n + 1);
  75. 75 }
  76. 76 }
  77. 77 else {//小于50000的质数或者不是质数的10^9以内的
  78. 78 int cnt, j = 0;
  79. 79 for (cnt = 1; cnt < n;) {
  80. 80 //printf("%d ", *(jiecheng + 1000 * cnt + j));
  81. 81 while (mem[j] > * (jiecheng + 1000 * cnt + j)) {
  82. 82 cnt++;//每一位幂次进行比较
  83. 83 }
  84. 84
  85. 85 //printf("%d ", *(jiecheng + 1000 * cnt + j));
  86. 86 if (mem[j] <= *(jiecheng + 1000 * cnt + j)) {
  87. 87 j++;//比较完一个每次进入下一个幂次
  88. 88 }
  89. 89 if (!mem[j] && j == n) {
  90. 90 break;
  91. 91 }
  92. 92
  93. 93
  94. 94 }
  95. 95 /*for (int i = 1; i < n; i++) {
  96. 96 for (int j =0 ; j < 10; j++) {
  97. 97 printf("%d ", *(jiecheng +1000 * i + j));
  98. 98 }
  99. 99 }*/
  100. 100 //printf("比%d大的最小阶乘是 %d !\n", n, cnt);
  101. 101 if (cnt > m + 1) printf("0\n");
  102. 102 else printf("%d\n", m - cnt + 1);
  103. 103 t--;
  104. 104 }
  105. 105 }
  106. 106 return 0;
  107. 107 }
  108. 108

1888-jerry99的数列--factorial的更多相关文章

  1. Factorial数列的几种实现方式

    斐波那契数列很常见,实现的方法主要有递归,for,栈等,下面给出代码 import java.math.BigInteger; import java.util.Scanner; import jav ...

  2. c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode

    #include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...

  3. php实现斐波那契数列以及由此引起的联想

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...

  4. Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

    什么是递归?简单的说就是:函数自身调用自身. “普通程序员用迭代,天才程序员用递归” 虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢, 但在一些算法上面仍然是递归 ...

  5. java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列

    什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...

  6. C#求斐波那契数列第30项的值(递归和非递归)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. BZOJ1500[NOI2005]维修数列

    Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一 ...

  8. PAT 1049. 数列的片段和(20)

    给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1 ...

  9. [LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数

    Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...

随机推荐

  1. Linux基础三:用户和组

    三.用户和组 1.概念 (1).用户概念: 用户是用来运行某一些进程.拥有某一些文件或目录. 在Linux里面,用户分成三大类:root用户.系统用户.普通用户. 用户是用UID来唯一标识身份的,且r ...

  2. Solon 1.5.67 发布,增加 GraalVm Native 支持

    Solon 已有120个生态扩展插件,此次更新主要为细节打磨: 添加 solon.extend.graalvm 插件,用于适配 graalvm native image 模式 从此,solon 进入 ...

  3. [atAGC045F]Division into Multiples

    令$d=\gcd(a,b)$,可以发现$c|(ax+by)$等价于$lcm(c,d)|(ax+by)$,因此不妨令$c'=lcm(c,d)$,然后将$a$.$b$和$c$同时除以$d$ 接下来设$(a ...

  4. nginx安装与配置1-nginx安装

    反向代理: 客户端不需要配置就可以访问,将请求发送到反向代理服务器, 由反向代理服务器选择目标服务器获取数据,再返回客户端,对外暴露代理服务器地址,隐藏真实ip 负载均衡: 客户端请求nginx等服务 ...

  5. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

  6. 洛谷 P4931 - [MtOI2018]情侣?给我烧了!(加强版)(组合数学)

    洛谷题面传送门 A 了这道题+发这篇题解,就当过了这个七夕节吧 奇怪的过节方式又增加了 首先看到此题第一眼我们可以想到二项式反演,不过这个 \(T\) 组数据加上 \(5\times 10^6\) 的 ...

  7. linux常用目录和文件解析

    1. 一级目录 /dev 设备目录 /etc 系统配置及服务配置文件.启动命令的目录 /proc 显示内核及进程信息的虚拟文件系统 /tmp 临时文件目录 /home 普通用户家目录 /root 超级 ...

  8. shell 脚本的基本定义

    注意不能有控制,指令之间 [1]shell脚本的基础知识 (1)shell脚本的本质 编译型语言 解释型语言 shell脚本语言是解释型语言 shell脚本的本质 shell命令的有序集合 (2)sh ...

  9. mysql 中@ 和 @@的区别

    @x 是 用户自定义的变量 (User variables are written as @var_name)@@x 是 global或session变量 (@@global @@session )@ ...

  10. PowerToys插件扩展(类似Alfred)

    在mac系统除了自带的Spotlight还有一个很好用的工具叫Alfred image 在windows系统也有一个很好用的工具叫PowerToys,是微软的一个开源项目 image https:// ...