如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的。

小Q喜欢收集有趣的数字,每找到一个有趣的数,小Q就会变得很开心。

小Q发现12是有趣的,18也是有趣的,它们都是36的约数,而在36的约数中,还有3个数是有趣的,它们是4、9、36。
小Q很好奇,在a~b里每个数字各有多少个有趣的约数,由于a和b太大了,所以他只想知道这些个数之和是多少。
例如4有1个有趣的约数,8有2个有趣的约数,9有1个有趣的约数,所以1~10里每个数的有趣约数个数之和是4。
Input
输入数据包括2个数:a, b,中间用空格分隔。(1≤a≤b≤10^9)
Output
输出a~b里每个数字的有趣约数个数之和。
Input示例
1 10
Output示例
4
思路:分块+莫比乌斯;
根据莫比乌斯abs(mul[i]) = 0表示i这个数有平方项因子,abs(mul[i]) = 1表示这个数没有平方项因子。

,那么答案就是S(m)-S(n-1);


然后分块计算,前sqrt(n)直接用公式,然后后面的因为(n/i)在一段区间内是相同的值,那么我们只要算出这个区间的长度,这个容斥下就行了,算出区间内符合是含有平方因子的数。
 1 #include<bits/stdc++.h>
2 typedef long long LL;
3 using namespace std;
4 bool prime[100005];
5 LL ak[100005];
6 LL mul[100005];
7 const int BufferSize=1<<16;
8 char buffer[BufferSize],*head,*tail;
9 inline char Getchar() {
10 if(head==tail) {
11 int l=fread(buffer,1,BufferSize,stdin);
12 tail=(head=buffer)+l;
13 }
14 return *head++;
15 }
16 inline int read() {
17 int x=0,f=1;char c=Getchar();
18 for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1;
19 for(;isdigit(c);c=Getchar()) x=x*10+c-'0';
20 return x*f;
21 }
22 LL slove(LL n);
23 int akk[100005];
24 int main(void)
25 {
26 int cn = 0;
27 mul[1] = 1;int ap = 0;
28 for(int i = 2; i <= 100000; i++)
29 {
30 if(!prime[i])
31 {
32 ak[cn++] = i;
33 mul[i] = -1;
34 }
35 for(int j = 0; j < cn&&(LL)ak[j]*i<=100000; j++)
36 {
37 if(i%ak[j])
38 {
39 prime[i*ak[j]] = true;
40 mul[i*ak[j]] = -mul[i];
41 }
42 else
43 {
44 prime[i*ak[j]] = true;
45 mul[i*ak[j]] = 0;
46 break;
47 }
48 }
49 if(mul[i])akk[ap++] = i;
50 }
51 LL n,m;
52 n = read(),m=read();
53 LL c = sqrt(n); LL sum = 0;
54 sum = slove(m)-slove(n-1);
55 printf("%lld\n",sum);
56 return 0;
57 }
58 LL slove(LL n)
59 { if(n == 0)return 0;
60 LL c = sqrt(n);LL sum = 0;
61 for(int i = 2;i <= c;i++)
62 {
63 if(!mul[i])
64 {
65 sum += n/i;
66 }
67 }
68 for(int i = 1;i <= n/c-1;i++)
69 {
70 LL a,b;
71 a = n/(i+1);
72 b = n/i;
73 a++;LL v = 0;
74 for(int j = 0;akk[j] <= sqrt(b);j++)
75 {
76 sum -= (mul[akk[j]]*((b)/(akk[j]*akk[j])-(a-1)/(akk[j]*akk[j])))*i;
77 }
78 }
79 return sum;
80 }

1742 开心的小Q的更多相关文章

  1. 【51nod】1742 开心的小Q

    题解 我们由于莫比乌斯函数如果有平方数因子就是0,那么我们可以列出这样的式子 \(\sum_{i = 1}^{n} \sum_{d|i} (1 - |\mu(d)|)\) 然后枚举倍数 \(\sum_ ...

  2. 51Nod 欢乐手速场1 C 开心的小Q[莫比乌斯函数]

    开心的小Q tangjz (命题人) quailty (测试)   基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的 ...

  3. 平面直接坐标系线段相交问题(小Q(钟神)的问题)

    [问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ...

  4. hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

  5. HD4505小Q系列故事——电梯里的爱情

    Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯里,小Q ...

  6. hdu4505小Q系列故事——电梯里的爱情

    小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  7. nyoj 49 开心的小明

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天 ...

  8. HDU-4515 小Q系列故事——世界上最遥远的距离

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  9. 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!

    我以为我会是最坚强的那一个 我还是高估了自己 我以为你会是最无情的那一个 还是我贬低了自己 就算不能够在一起 我还是为你担心 就算你可能听不清 也代表我的心意 那北极星的眼泪 闪过你曾经的眼角迷离 那 ...

随机推荐

  1. Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异

    0.exists() 用法: select * from T1 where exists(select 1 from T2 where T1.a=T2.a) 其中 "select 1 fro ...

  2. 用JS实现方块碰撞

    首先我们应用上次的内容--方块拖拽,利用方块拖拽来让两个方块进行碰撞. 我们可以先定义两个正方形方块,红色的div1,绿色的div2,我们来实现当div1碰撞div2时div2的颜色变为黄色 HTML ...

  3. 使用Docker编译OpenResty支持国密ssl加密

    编译环境 执行编译操作环境如下 #操作系统 CentOS Linux release 7.4.1708 (Core) #docker版本 Version: 19.03.5 编译过程 Dockerfil ...

  4. Navicat连接Linux系统下的Mysql数据库

    1 . 进入Linux机器 , 登录并进入mysql如果没有安装mysql,参照 https://blog.csdn.net/weixin_35353187/article/details/81712 ...

  5. 看动画学算法之:二叉搜索树BST

    目录 简介 BST的基本性质 BST的构建 BST的搜索 BST的插入 BST的删除 简介 树是类似于链表的数据结构,和链表的线性结构不同的是,树是具有层次结构的非线性的数据结构. 树是由很多个节点组 ...

  6. Mysql索引数据结构详解(1)

    慢查询解决:使用索引  索引是帮助Mysql高效获取数据的排好序的数据结构 常见的存储数据结构: 二叉树    二叉树不适合单边增长的数据 红黑树(又称二叉平衡树)    红黑树会自动平衡父节点两边的 ...

  7. 《Scala编程》课程作业

    第一题.百元喝酒 作业要求:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒.100元最多可喝多少瓶啤酒?(不允许借啤酒) 思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数 /** ...

  8. 【leetcode】153. Find Minimum in Rotated Sorted Array

    Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example ...

  9. MySQL学习(一)——创建新用户、数据库、授权

    一.创建用户 1.登录mysql mysql -u root -p 2.创建本地用户>/font> use mysql; //选择mysql数据库 create user 'test'@' ...

  10. 使用 ACE 库框架在 UNIX 中开发高性能并发应用

    使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论 ...