1888-jerry99的数列--factorial
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的更多相关文章
- Factorial数列的几种实现方式
斐波那契数列很常见,实现的方法主要有递归,for,栈等,下面给出代码 import java.math.BigInteger; import java.util.Scanner; import jav ...
- c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode
#include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...
- php实现斐波那契数列以及由此引起的联想
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...
- Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列
什么是递归?简单的说就是:函数自身调用自身. “普通程序员用迭代,天才程序员用递归” 虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢, 但在一些算法上面仍然是递归 ...
- java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列
什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- BZOJ1500[NOI2005]维修数列
Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一 ...
- 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 ...
- [LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数
Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...
随机推荐
- OAuth 2.0 扩展协议之 PKCE
前言 阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅. PKCE 全称是 Proof Key for Code Exchange, ...
- 后台大哥请进一步:使用Visual Studio编译scss和souce map实现前后端的完美结合
title: 后台大哥请进一步:使用Visual Studio编译scss和souce map实现前后端的完美结合 date: 2020-06-28 sidebarDepth: 2 tags: win ...
- 列生成算法(求解Cutting Stock问题)
列生成是用于求解大规模线性优化问题的一种算法,其实就是单纯形法的一种形式.单纯性可以通过不断迭代,通过换基变量的操作,最终找到问题的最优解.但是当问题的规模很大之后,变量的个数就会增大到在有限时间内无 ...
- Maven的pom.xml的格式与约束
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Kubernetes(K8s)极速入门
1. 概述 老话说的好:努力学习,努力提高,做一个有真才实学的人. 言归正传,之前我们聊了 如何使用国内的镜像源搭建 kubernetes(k8s)集群 ,今天我们来聊聊如何在 kubernetes( ...
- 小白都能看懂的 Spring 源码揭秘之依赖注入(DI)源码分析
目录 前言 依赖注入的入口方法 依赖注入流程分析 AbstractBeanFactory#getBean AbstractBeanFactory#doGetBean AbstractAutowireC ...
- Python之浏览器的前进或后退
import webbrowserwebbrowser.back() 后退webbrowser.forward() 前进
- Flink 是如何统一批流引擎的
关注公众号:大数据技术派,回复"资料",领取1000G资料. 本文首发于我的个人博客:Flink 是如何统一批流引擎的 2015 年,Flink 的作者就写了 Apache Fli ...
- OI省选算法汇总及学习计划(转)
1.1 基本数据结构 数组(√) 链表(√),双向链表(√) 队列(√),单调队列(√),双端队列(√) 栈(√),单调栈(√) 1.2 中级数据结构 堆(√) 并查集与带权并查集(√) hash 表 ...
- 详解getchar()函数与缓冲区
1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...