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. 将Linux中文语言修改成英文的具体操作方法及报错解决

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  2. Linux下搭建FFmpeg开发调试环境

    背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可.但是如果你想调试FFmpeg内部相关的逻辑,或者 ...

  3. 日记啦QWWQ

    随便写写 时间 :2021年11月15日 今天是在博客园创建博客的第一天,彻底放弃在CSDN中的博客,广告实在是太多了,QWQ. 来计科的第一个学期就快要结束了,期间有很多的遗憾,往后加油吧! 没什么 ...

  4. Spring Aop面向切面编程&&自动注入

    1.面向切面编程 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程叫做面向切面编程 2.常用概念 原有功能:切点,pointcut 前置通知:在切点之前执行的功能,befor ...

  5. Redis 很屌,不懂使用规范就糟蹋了

    这可能是最中肯的 Redis 使用规范了 码哥,昨天我被公司 Leader 批评了. 我在单身红娘婚恋类型互联网公司工作,在双十一推出下单就送女朋友的活动. 谁曾想,凌晨 12 点之后,用户量暴增,出 ...

  6. Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)

    Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...

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

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

  8. Codeforces 923E - Perpetual Subtraction(微积分+生成函数+推式子+二项式反演+NTT)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 首先考虑最朴素的 \(dp\),设 \(dp_{z,i}\) 表示经 ...

  9. AT695 マス目

    AT695 マス目 本题选自 DP 优化方法大杂烩 状压部分. 这个题很 nb.下文记 \(n=H\),\(m=W\). 对于每一列,如果只记录一个格子是否为黑色,那么发现它无法处理从右边绕到左边再绕 ...

  10. c#图标、显示图表、图形、json echarts实例 数据封装【c#】

    page: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Viewxxx ...