传送门

参考资料:

  [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-)*(p-)
(p-)一定为偶数,则 φ(p^k)为偶数,则 φ(x)为偶数;
②如果p为偶数:
那么,p只能为2;
如果k > ,那么 φ(^k)为偶数;
如果k = ,那么对于大于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代码:

 #include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
#define ll long long ll n,m; ll Solve(ll x)
{
if(x < )
return ;
ll tot=sqrt(x);
if(tot*tot > x)//sqrt()函数存在精度问题,可能使得tot*tot > x
tot--;
ll ans=x/-;
return ans+((tot% == )?-:);
}
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
scanf("%lld%lld",&n,&m);
printf("%lld\n",Solve(m)-Solve(n-));
}
return ;
}

hdu 4279"Number"(数论)的更多相关文章

  1. HDU 4279 Number(2012天津网络游戏---数论分析题)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:pid=4279">http://acm.hdu.edu ...

  2. HDU 4279 Number(找规律)

    Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. HDU 4279 Number 坑爹的迷之精度

    题目描述 首先定义"special number": 如果对于一个数字B,存在一个数字A(0<A<=B),并同时满足 B%A=0 和 gcd(A,B) != 1 ,那么 ...

  4. HDU 4279 - Number

    2012年天津赛区网赛的题目,想了好久,也没能想出来 还是小杰思路敏捷,给我讲解了一番,才让我把这个题做出来 f(x)=x-phi(x)(1——x与x互素个数)-g(x)(x的因子个数)+1 其中g( ...

  5. hdu 4279 Number(G++提交)

    打表找规律: #include<stdio.h> #include<math.h> #define N 250 bool judge(int i,int j) { ;k< ...

  6. HDU 1005 Number Sequence(数论)

    HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, ...

  7. HDU 1711 Number Sequence(数列)

    HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...

  8. HDU 1005 Number Sequence(数列)

    HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...

  9. HDU 4054 Number String

    HDU 4054 Number String 思路: 状态:dp[i][j]表示以j结尾i的排列 状态转移: 如果s[i - 1]是' I ',那么dp[i][j] = dp[i-1][j-1] + ...

随机推荐

  1. python数据结构与算法第三天【时间复杂度计算方法】

    最优时间复杂度(不可靠) 最坏时间复杂度(保证) 平均时间复杂度(平均状况) 不同语句的时间复杂度: (1)顺序语句:使用加法 (2)循环语句:使用乘法 (3)分支语句:使用坏时间复杂度 例如:如下代 ...

  2. SSM+shiro及相关插件的整合maven所有依赖,详细注释版,自用,持续更新

    整合了SSM+shiro框架,slf4j+logback日志,及一些好用的插件PageHelper,mybatis-generator,Lombok,fastjson等等 <?xml versi ...

  3. @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常==》记录

    对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚. 如此一来, ...

  4. hdu-1814(2-sat)

    题意:给你n个组,m条规则,每组有俩个人,这两个人不能同时出现,然后m条规则代表着有两个人,这两个人也不能同时出现,问你是否存在每组都能出现一人的选择方案 解题思路:因为这个需要字典序输出,所以只能用 ...

  5. Nginx 如何处理上游响应的数据

    陶辉93 一个非常重要的指令 proxy_buffer_size 指令限制头部响应header最大值 proxy_buffering 指令主要是指 上游服务器是否接受完完整包体在处理 默认是on 也就 ...

  6. 法语Linux NuTyX 11 RC2 发布

    读 NuTyX是一个法语Linux发行版(具有多语言支持),由Linux From Scratch和Beyond Linux From Scratch构建,带有一个名为“cards”的自定义包管理器. ...

  7. Android 模块化/热修复/插件化 框架选用

    概念汇总 动态加载:在程序运行的时候,加载一些程序自身原本不存在的文件并运行这些文件里的代码逻辑.动态加载是热修复与插件化实现的基础. 热修复:修改部分代码,不用重新发包,在用户不知情的情况下,给ap ...

  8. MySQL字段属性NUll的注意点

    MySQL字段属性应该尽量设置为NOT NULL 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL.这看起来好像有点争议,请往下看. 空值("&quo ...

  9. 使用Google ZXing生成和解析二维码

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  10. BZOJ2565最长双回文串——manacher

    题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两 ...