1 

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

    Excel上传导入,Excel里面单元格是日期的会解析出来数字,比如2020-07-11会解析为44023解决方法一: Excel单元格格式设置为文本格式.解决方法二: 使用代码处理,把解析出来的44 ...

  2. 【Mysql】表锁 行锁 记录锁 间隙锁

    Mysql中的锁 基于锁的属性分类:共享锁.排他锁. 基于锁的状态分类:意向共享锁.意向排它锁 根据锁的粒度分类:全局锁.页锁.表级锁.行锁(记录锁.间隙锁.和临键锁),实际上的锁就这些,上面两种分类 ...

  3. 彻底搞懂Spring状态机原理,实现订单与物流解耦

    本文节选自<设计模式就该这样学> 1 状态模式的UML类图 状态模式的UML类图如下图所示. 2 使用状态模式实现登录状态自由切换 当我们在社区阅读文章时,如果觉得文章写得很好,我们就会评 ...

  4. [cf1261E]Not Same

    问题可以这么理解-- 构造一个$n+1$行$n$列的01矩阵$A$,满足: 1.第$i$列$n+1$个数的和为$a_{i}$ 2.任意两行不完全相同 (对应关系:第$i$行第$j$列为1当且仅当第$i ...

  5. [loj2977]巧克力

    先考虑第一个问题,即求最小的巧克力块数 将这张网格图建图(仅对$c_{i,j}\ne -1$的位置建点),即求点数最少的连通块(的点数)使得存在$k$个不同的$c_{i,j}$ (以下$c$仅用一维数 ...

  6. layui的下拉-多选

    网址: https://hnzzmsf.github.io/example/example_v4.html 1.下载代码: 2.整合layui 3.代码整合: <link rel="s ...

  7. 一次奇怪的的bug排查过程

    公司对底层基础库进行了重构,线上稳定跑了几天,在查看订单系统的log时,有几条error信息非常的奇怪, orderID:80320180 statemachine error: no event [ ...

  8. 洛谷 P3246 - [HNOI2016]序列(单调栈+前缀和)

    题面传送门 这道题为什么我就没想出来呢/kk 对于每组询问 \([l,r]\),我们首先求出区间 \([l,r]\) 中最小值的位置 \(x\),这个可以用 ST 表实现 \(\mathcal O(n ...

  9. Oracle-除了会排序,你对ORDER BY的用法可能一无所知!

    导读 为什么只有ORDER BY后面可以使用列别名 为什么不推荐使用ORDER BY后接数字来排序 为什么视图和子查询里面不能使用ORDER BY -- ​小伙伴们在进行SQL排序时,都能很自然的使用 ...

  10. Tomcat类加载机制和JAVA类加载机制的比较

    图解Tomcat类加载机制    说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷.    之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的 ...