Mr.Z 的四因子数 (数据加强版)
题目描述
Mr.Z 是一多高超的数学大师,最喜欢研究的领域是数论,由于要经常做各类特殊的整数分布研充,所以他想麻烦你帮他解决一个问题。
考虑这样的一个数 K,它只含有四个因子,比如 10,它只有:1、2、5、10 这四个因子。我们将满足上述性质的数称为四因子数。
现在想请问你在区间 [ a, b ] 内有多少个四因子数。
输入描述
有多组测试数据,每组测试数据占一行。
每一行中,有两个用空格分隔的正整数 a 和 b。
a 和 b 均不超过 700000。
输出描述
对每组测试数据,输出一行答案。
输入样例
1 66666
1 666666
输出样例
15878
142481
这一题中给出了四因子数的定义,求n以内四因子数的个数。
第一眼看到这个题目,觉得还是有点复杂的,再仔细想下去,觉得还是有简单一点的方法的,分享一下脑海中的思路形成
过程:
想着从2枚举到根号x来看看符不符合在这个区间只有一个因子,
发现每次重新输入一个n都要重新判断1到n中四因子数的个数,重复操作太多,每次输入n之后的时间复杂度达到了O(n根号n),能不能减少重复判断的次数呢,换而言之,将每个数判断的结果放在数组中,需要计算的时候直接拿出来岂不是更快
结合上面所说,想到判断素数也有过这样的问题,筛法显得异常的高效,这一题也可以用筛法啊,
于是决定,数组的每个位上表示因数个数,构造数组时只要挨个遍历一遍,给在后面的数字中是自己的倍数的都加个1就行,计算时取数组为2的,将索引加入sum中
于是,代码如下:
#include<memory.h>
#include<iostream>
using namespace std;
char yinshugeshu[700100];
int main(