传送门

参考资料:

  [1]:https://www.2cto.com/kf/201308/233613.html

题意,题解在上述参考资料中已经介绍的非常详细了,接下来的内容只是记录一下我的理解;

我的学习记录:

  定义 f(x) : x的因子个数;

    φ(x) : x之前与x互素的数的个数;

  那么 F(x) = x - f(x) - φ(x) + 1;

  为什么要 +1 呢?

  因为 f(x) 和 φ(x) 同时包含 1 这个数,所以要加上多减去的 1;

  根据算术基本定理:

    任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积

      N=P1a1×P2a2×P3a3×......×Pnan,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。

  那么,N的因子肯等为 x = P1b1×P2b2×P3b3×......×Pnbn 这种形式,易知 b1∈[0,a1] , b2∈[0,a2] , ..... , bn∈[0,an],共

      f(x) = (a1+1)*(a2+1)*........*(an+1)个因子;

  如果要使 f(N) 为奇数,那么  (a1+1),(a2+1),........,(an+1) 要全部为奇数,也就是说  a1 , a2 ,........,an 全为偶数,即 N 为完全平方数;

  综上:

    N为完全平方数时,f(N)为奇数;

    N为非完全平方数时,f(N)为偶数;

  接下俩就是求解φ(x),这个是数论中比较重要的公式--欧拉公式;

  定理1:

    如果GCD(a,b) == 1,那么 φ(a*b) = φ(a)*φ(b);

  定理2:

    如果 p 为素数,那么 φ(pk) = pk-1*(p-1);

  (相关证明自行百度,逃);

  定理3:

    那么对于任意大于 2 的数 x = P1a1×P2a2×P3a3×......×Pnan, φ(x) 为偶数;

①如果p为奇数:根据公式 φ(p^k)=p^(k-1)*(p-1) (p-1)一定为偶数,则 φ(p^k)为偶数,则 φ(x)为偶数;
②如果p为偶数:那么,p只能为2;如果k > 1,那么 φ(2^k)为偶数;如果k = 1,那么对于大于2的数x,一定会分解出除2的另一个质因子p2,根据①的得知φ(p2^k2)为偶数;
综上φ(x)为偶数;

定理3简单证明

  综上所述:

    当 x > 2 时:

    ①如果x为完全平方数,那么 F(x) = x - f(x) - ( φ(x) -1) = x - 奇数 - 奇数 = x - 偶数,只有当 x 为奇数时,F(x)为奇数;

    ②如果x为非完全平方数,那么 F(x) = x - f(x) - ( φ(x) -1) = x - 偶数 - 奇数 = x - 奇数,只有当 x 为偶数时,F(x)为奇数;

  所以,[3,x] 中使得 F(i) 为奇数的个数 ⇔ [3,x]中 奇完全平方数+偶非完全平方数 = 偶数-偶完全平方数+奇完全平方数;

  [3,x]中偶数的个数为 x/2 - 1 (减掉的是 2), 平方数个数为 sqrt(x)-1 (减掉的是 1)个;

  如果 (sqrt(x)-1)%2 == 0(sqrt(x)为奇数),那么 偶完全平方数与奇完全平方数 个数相等,F(x) = x/2-1;

  如果 (sqrt(x)-1)%2 ≠ 0(sqrt(x)为偶数),那么 偶完全平方数比奇完全平方数 个数多1,F(x) = x/2-1 -1;

AC代码:

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 using namespace std;
 5 #define ll long long
 6
 7 ll n,m;
 8
 9 ll Solve(ll x)
10 {
11     if(x < 3)
12         return 0;
13     ll tot=sqrt(x);
14     if(tot*tot > x)//sqrt()函数存在精度问题,可能使得tot*tot > x
15         tot--;
16     ll ans=x/2-1;
17     return ans+((tot%2 == 0)?-1:0);
18 }
19 int main()
20 {
21     int test;
22     scanf("%d",&test);
23     while(test--)
24     {
25         scanf("%lld%lld",&n,&m);
26         printf("%lld\n",Solve(m)-Solve(n-1));
27     }
28     return 0;
29 }

View Code

转载于:https://www.cnblogs.com/violet-acmer/p/10676924.html

hdu 4279Number(数论)相关推荐

  1. hdu 3641 数论 二分求符合条件的最小值数学杂题

    http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...

  2. HDU 4651 数论 partition 求自然数的拆分数

    别人的解题报告: http://blog.csdn.net/zstu_zlj/article/details/9796087 我的代码: 1 #include <cstdio> 2 #de ...

  3. HDU 6069 数论 区间素数筛 + 赛后反思

    题目链接 设 x = p 1 a 1 p 2 a 2 . . . . p n a n x = p_1^{a_1}p_2^{a_2}....p_n^{a_n} x=p1a1​​p2a2​​....pna ...

  4. NOI数学:莫比乌斯变换

    P5491 [模板]二次剩余 [模板]二次剩余 - 洛谷 P1082 [NOIP2012 提高组] 同余方程 [NOIP2012 提高组] 同余方程 - 洛谷 [模板题]Luogu-P4717 快速莫 ...

  5. 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂

    Your job is simple, for each task, you should output Fn module 109+7. Input The first line has only ...

  6. 数学--数论--HDU 2582 F(N) 暴力打表找规律

    This time I need you to calculate the f(n) . (3<=n<=1000000) f(n)= Gcd(3)+Gcd(4)+-+Gcd(i)+-+Gc ...

  7. hdu 3123(GCC)数论

    http://acm.hdu.edu.cn/showproblem.php?pid=3123 题目给出的n很大,很明显如果n很大时,是不用处理到n的,所以其中必有蹊跷! 当n大于m时 ,n的阶乘中必定 ...

  8. HDU 3240 Counting Binary Trees 数论-卡特兰数

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3240 卡特兰数递推公式h(i)=h(i-1)*(4*i-2)/(i+1) 如果直接算每一步,然后mo ...

  9. 数论 + 公式 - HDU 4335 What is N?

    What is N? Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=4335 Mean: 给你三个数b.P.M,让你求有多少个n ...

最新文章

  1. 从零开始学JavaScript一(简介)
  2. centos中如何找出系统中 load 高时处于运行队列的进程
  3. C语音的预处理,编译,汇编,链接过程分析
  4. java 二维数组倒置_Java数组反转及二维数组
  5. C#连接sqlServer数据库详解
  6. html 高度不够,HTML/CSS:Div未扩展到内容高度
  7. 一种快速构造和获取URL查询参数的方法:URLSearchParams
  8. Python+OpenCV:Canny边缘检测
  9. centos6下安装php7的memcached扩展
  10. java socket编程 聊天_基于java的socket简单聊天编程
  11. Linux系统日志及screen工具
  12. 计算机图形学的边表教学ppt,计算机图形学(多边形的扫描转换).ppt
  13. 学校计算机机房维护年度总结,学校计算机机房的管理和维护建议原稿(全文完整版)...
  14. 12 | 腾讯云代码分析快速部署
  15. Word中规范输入大写的中文日期(转)
  16. Linux编写脚本nsum求和,shell脚本学习与总结
  17. StatsD,collected,fluentd和其他守护程序
  18. 【Python打卡2019】20190406之货币兑换
  19. 学习了罗昭锋的文献管理与信息分析的感受
  20. Oracle-count加条件计算

热门文章

  1. coreseek mysql_coreseek (sphinx)+ Mysql + Thinkphp搭建中文搜索引擎详解
  2. 吉林考生多少分能考上哈工大计算机专业,福建考生多少分能上哈工大?
  3. mel加载一个物体不同姿态的模型实现动画效果
  4. 第一章 了解BaseApplication框架以及使用Ogre Application Wizzard
  5. 基于 CNN 和迁移学习的农作物病害识别方法研究
  6. 【matlab】三维曲面(矩形网格---meshgrid)
  7. 实现excel导入_PhpOffice实现Excel表格导入的解耦方法
  8. 从零开始刷Leetcode——字符串(13.14.20.28)
  9. quartz定时器依赖_Spring Quartz定时器 配置文件详解
  10. windows分辨率修改工具_小视频压缩、倒放,这些小工具轻松搞定