NUIST OJ 1369 [2017 江苏科技大学 程序设计竞赛] B. Mr.Z 的四因子数 (数据加强版)

  • NUIST OJ 1369 2017 江苏科技大学 程序设计竞赛 B MrZ 的四因子数 数据加强版

    • 题目
    • 题目分析
    • 求素数表及欧拉函数表
    • 根据分解关系求数量
      • 一个素数的三次方的情况
      • 两个不相等的素数的乘积
    • 整体代码与运行结果
    • 随便说说
    • 后记

题目

题目描述

Mr.Z 是一多高超的数学大师,最喜欢研究的领域是数论,由于要经常做各类特殊的整数分布研充,所以他想麻烦你帮他解决一个问题。
考虑这样的一个数 K,它只含有四个因子,比如 10,它只有:1、2、5、10 这四个因子。我们将满足上述性质的数称为四因子数。
现在想请问你在区间 [ a, b ] 内有多少个四因子数。

输入描述

有多组测试数据,每组测试数据占一行。
每一行中,有两个用空格分隔的正整数 a 和 b。
a 和 b 均不超过 700000。

输出描述

对每组测试数据,输出一行答案。

样例输入

1 66666
1 666666

样例输出

15878
142481

题目分析

易得,四因子数可以为两个不相等的素数的乘积或者一个素数的三次方。
因此,题目就划归成为求素数表和根据分解关系求数量

求素数表及欧拉函数表

此处贴出我之前写的快速求素数表的方法
快速求素数表——埃氏筛法与欧拉筛法
详细就不再解释了

根据分解关系求数量

一个素数的三次方的情况

此处需要用到头文件

#include<cmath>

这是为了使用下面的cbrt()函数
cbrt()函数的作用是开三次方。在欧拉函数中,可以直接求得在 1-T 的数字中,由一个素数的三次方组成四因子数的个数。

sum = pri[(int)cbrt(T)];

两个不相等的素数的乘积

两个不相等素数的乘积即使素数表中第1个开始,乘以第2个、第3个直到乘积即将大于 T 为止
结束本次循环之后,从第2个素数开始重复执行上述循环,直到素数的大小即将大于 T 的二次开方。

for (int i = 0, m, n, t = sqrt(T);; i++) {m = pri[prime[i]];n = pri[T / prime[i]];if (prime[i]>t)break;elsesum += n - m;
}

整体代码与运行结果

/*code is far away from bug with the animal protecting
*    ┏┓  ┏┓
*┏   ┛┻━━━┛┻┓
*┃         ┃  
*┃   ━   ┃
*┃   ┳┛ ┗┳  ┃
*┃       ┃
*┃   ┻   ┃
*┃      ┃
*┗━┓   ┏━┛
*  ┃   ┃神兽保佑
*  ┃   ┃代码无BUG!
*  ┃   ┗━━━┓
*  ┃       ┣┓
*  ┃       ┏┛
*  ┗┓┓┏━┳┓┏┛
*   ┃┫┫ ┃┫┫
*   ┗┻┛ ┗┻┛
*   
*/
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
#define LENGTH 701005
int is_prime[LENGTH];//是否是素数
int prime[LENGTH];//素数表
int pri[LENGTH];//欧拉函数表
int get(int T) {int sum;sum = pri[(int)cbrt(T)];for (int i = 0, m, n, t = sqrt(T);; i++) {m = pri[prime[i]];n = pri[T / prime[i]];if (prime[i]>t)break;elsesum += n - m;}return sum;
}
int main() {int a, b;memset(is_prime, 0, sizeof(int)*LENGTH);memset(prime, 0, sizeof(int)*LENGTH);memset(pri, 0, sizeof(int)*LENGTH);for (int i = 2, t = 0, p = 0; i < LENGTH/2; i++) {pri[i] = pri[i - 1];if (is_prime[i] == 0){prime[p++] = i;pri[i]++;}for (int j = 0; j<p&&i*prime[j] <= LENGTH/2; j++) {is_prime[i*prime[j]] = 1;if (i%prime[j] == 0)break;}}while (cin >> a >> b) {cout << get(b) - get(a - 1) << endl;}return 0;
}

似乎神兽在MarkDown里面出了点问题大家不要在意这个细节

结果如下

随便说说

在查询量很大的时候,这题目还可以用差分进行优化,以此达到高效多组查询的目的。
然而偷懒的我就不写在这里。

后记

照例感谢 ThinkSpirit诸位大佬的支持

附上大佬的题解

NUIST OJ 1369 [2017 江苏科技大学 程序设计竞赛] B. Mr.Z 的四因子数 (数据加强版)相关推荐

  1. NUIST OJ 1364 [2017 江苏科技大学 程序设计竞赛]D.重复成绩统计(改编) 【STL-map】

    NUIST OJ 1364 [2017 江苏科技大学 程序设计竞赛]D.重复成绩统计(改编) [STL-map] NUIST OJ 1364 2017 江苏科技大学 程序设计竞赛D重复成绩统计改编 S ...

  2. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    华南师大 2017 年 ACM 程序设计竞赛新生初赛题解 华南师范大学第很多届 ACM 程序设计竞赛新生赛(初赛)在 2017 年 11 月 20 日 - 27 日成功举行,共有 146 名同学有效参 ...

  3. 2017年山东省程序设计竞赛心得反思

    一.赛前训练 1.大一上学期自己一直羡慕班里在ACM集训队的同学,一直认为ACM集训队的成员都属于那种天赋异禀的天才,但当自己在504集训时,发现更多的不是ACM队员们的天赋多么异禀,更多是他们身上的 ...

  4. 2017广东工业大学程序设计竞赛决赛相关总结

    这是一直以来,自己碰到的最简单的网络赛 这么说主要是用到的高级数据结构.算法不是很多 除了一些知识盲区,还是在一些基础的问题上翻了船 但是不得不吐槽广工的OJ,前面几个题一个半小时可以出结果,后面的就 ...

  5. 第十四届华中科技大学程序设计竞赛 B Beautiful Trees Cutting【组合数学/费马小定理求逆元/快速幂】...

    链接:https://www.nowcoder.com/acm/contest/106/B 来源:牛客网题目描述 It's universally acknowledged that there're ...

  6. 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...

  7. 2017中国大学生程序设计竞赛 - 网络选拔赛 [1005 - CaoHaha's staff] 贪心

    题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=779 题目大意:在一个二维坐标网格里画线,可 ...

  8. 2017广东工业大学程序设计竞赛决赛(官方题解)

    题目链接:http://gdutcode.sinaapp.com/contest.php?cid=1056 Problem A: 两只老虎 正常的+有耳朵的 = a/2 正常的+有尾巴的 = b 正常 ...

  9. 2017中国大学生程序设计竞赛-哈尔滨站(2/13)

    F.Permutation 题意 给一个n,构造一个1~n的序列使得  pi ≡ 0 ( mod |pi−pi−2| ) for i=3...n 分析 直接暴力让p[i]- p[i-2]=1,先安排奇 ...

最新文章

  1. 关于对话框DoModal()函数调用失败的原因分析
  2. 梯度下降原理及在线性回归、逻辑回归中的应用
  3. pureftpd 如何修改管理员密码
  4. SpringBoot和监控管理
  5. python基础知识500题_Python基础语法习题参考(0-9关)
  6. 国内外最佳的photoshop教程网站推荐
  7. 数据结构试卷及答案(六)
  8. Onenote实现OCR识别图片
  9. mhdd测试hdd硬盘软件,HDD坏道检测软件比较(DiskGenius/HdTunePro/MHDD等)
  10. 神经网络的过拟合是什么,神经网络过拟合的表现
  11. 【C语言】动态内存的分配
  12. 【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
  13. Amcharts 入门教程
  14. GemCraft Labyrinth:超耐玩的在线flash塔防游戏
  15. 牛客练习赛72-Abrz的杯子brz的雪糕
  16. 你的格局,注定你的结局
  17. SAP采购中寄售和外协加工信息记录的不同应用逻辑解析
  18. 笃行致远 砥砺前行 华云数据西南区域公司正式乔迁
  19. C语言栈的演示(入栈,弹栈,遍历)
  20. c语言整形变浮点型报错,【C语言】第一章

热门文章

  1. IDCNAR 账龄未清应收负数问题解决 F-51清账 示意
  2. 根据Outlook收件箱的邮件提取发件人邮箱地址到excel后再导入到Outlook联系人
  3. Unity协程控制队列
  4. 树莓派接手机屏幕_如何使用手机实现树莓派的连接
  5. 行业类别-树形结构(数据字典、参数化,数据库)
  6. CCS模块库文件的生成与使用
  7. wav怎么转mp3?请看详细步骤
  8. micropython做中继_utime – 时间相关的功能
  9. Linux utime和utimes函数
  10. Java基础面试题一