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. 第二次SQLServer试验解

    1 --给BookInfo表的BookId建立主键约束,给BookInfo表的BookName建立非空约束 2 create table BookInfo( 3 BookId int primary ...

  2. CODING 项目协同 2.0 —— 让协作有条不紊

    本文为 CODING 高级产品经理王海明 在腾讯云 CIF 工程效能峰会上所做的分享.文末可前往峰会官网,观看回放并下载 PPT. 大家好,我是 CODING 高级产品经理王海明,今天与大家分享的是项 ...

  3. x86汇编反编译到c语言之——(2)if语句

    一. 测试的C语句及编译后的x86汇编代码 int a; int b; int main(void) { int c; if (c) a = 4; else b = 5; return 0; } 1 ...

  4. 关闭 IDEA 自动更新

    关闭 IDEA 的自动检查更新(截图idea 2020 2.x) idea 右下角会有这样的更新提示 2. 关闭 idea 自动检查更新 取消勾选 Automatically check update ...

  5. 如何利用efetch从NCBI中批量下载数据?

    目录 找序列 下序列 假设我要从NCBI中下载全部水稻的mRNA序列,如何实施? 找序列 第一步,肯定是找到相关序列. 我从ncbi taxonomy进入,搜索oryza.因为要搜索mRNA核酸序列, ...

  6. 体积与边精确积分DGM方法

    Triangular DGM 1. Basis functions decomposing the domain \(\Omega\) into \(N_e\) conforming non-over ...

  7. Excel-姓名列中同一个人汇总金额列,得出总金额

    8.姓名列中同一个人求和金额列,得出总金额. 方法一: P2处公式=SUMPRODUCT(($M$2:$M$20=$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan. ...

  8. 同一局域网,远程连接别人的Mysql数据库

    数据库:MySQL 工具: Navicat, 电脑A连接电脑B的数据库, 确保两部电脑都是在同一个局域网,都是连着同一个路由器,或者连接同一个WiFi, 如果不确定是否为同一个局域网,可以打开cmd, ...

  9. PC端页面转换成手机端页面的分辨率问题的理解

    PC端页面转换成手机端页面的分辨率问题的理解 px vw rem 假如就以a4纸模式为设计图 ,在a3纸模式中设计,然后设计出来展示在不同的a4纸模式上 通常是 750px -> 100vw / ...

  10. [源码解析] PyTorch分布式优化器(1)----基石篇

    [源码解析] PyTorch分布式优化器(1)----基石篇 目录 [源码解析] PyTorch分布式优化器(1)----基石篇 0x00 摘要 0x01 从问题出发 1.1 示例 1.2 问题点 0 ...