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 ...
随机推荐
- 菜鸡的Java笔记 comparator 比较器
1.数组操作类: Arrays 2.两种比较器的使用: Comparable Comparator 3.实现二叉树算法 content (内容) ...
- php 变量和数据类型
$ 定义变量: 变量来源数学是计算机语言中能存储计算结果或能表示值抽象概念.变量可以通过变量名访问.在指令式语言中,变量通常是可变的. php 中不需要任何关键字定义变量(赋值,跟Java不同,Jav ...
- 物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课
写在前面的废话: 很久没有更新文章了,这段时间一直忙于项目落地,虽然很忙,但是感觉没有总结,没有提炼的日子,总是让人感觉飘飘忽忽的. 所幸放下一些事,抽出一些时间,把近期的项目做一些整理与记录.也算是 ...
- Nginx server_name翻译
http://nginx.org/en/docs/http/server_names.html#regex_names 匹配优先顺序 精确名称,无通配符,无正则. 以星号开头的最长的通配符名称,例如& ...
- python实现高斯滤波
一,定义 核是:3 *3 均值滤波 二,高斯函数 Y方向的方差与X方向的一致.处理后图像看起来更模糊(滤波明显)的话,核要更大. (三)代码实现 (四)核计算 (五)图像产生高斯噪声循环代码实 ...
- [gym102832J]Abstract Painting
考虑每一个圆即对应于区间$[x_{i}-r_{i},x_{i}+r_{i}]$,可以看作对于每一个区间,要求所有右端点严格比其小的区间不严格包含左端点 用$f_{i}$表示仅考虑右端点不超过$i$的区 ...
- [cf1379F]Chess Strikes Back
考虑将$(2i-1,2j-1)$和$(2i,2j)$缩为一个点,记作$(i,j)$ 对于每一个点,只能选$(2i-1,2j-1)$或$(2i,2j)$(显然不能都选),而这样恰好为$nm$个,因此必须 ...
- Redis 源码简洁剖析 02 - SDS 字符串
C 语言的字符串函数 C 语言 string 函数,在 C 语言中可以使用 char* 字符数组实现字符串,C 语言标准库 string.h 中也定义了多种字符串操作函数. 字符串使用广泛,需要满足: ...
- Hi3516开发笔记(五):通过HiTools使用网口将uboot、kernel、roofts和userdata按照分区表烧写镜像
前言 前面生成了uboot,kernel,sample,userdata(我们实际修改了ip的),rootfs,现在需要烧写进入核心板. 使用网口烧写镜像(海思烧写必须占用调试串口) 步骤一: ...
- Codeforces 1466G - Song of the Sirens(哈希)
Codeforces 题面传送门 & 洛谷题面传送门 事实证明,有的难度评分不算很高.涉及的知识点不算很难的题目也能出得非常神仙 首先考虑如何暴力求答案.注意到一个文本串 \(T\) 在 \( ...