hdu 4279"Number"(数论)
参考资料:
[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"(数论)的更多相关文章
- HDU 4279 Number(2012天津网络游戏---数论分析题)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:pid=4279">http://acm.hdu.edu ...
- HDU 4279 Number(找规律)
Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 4279 Number 坑爹的迷之精度
题目描述 首先定义"special number": 如果对于一个数字B,存在一个数字A(0<A<=B),并同时满足 B%A=0 和 gcd(A,B) != 1 ,那么 ...
- HDU 4279 - Number
2012年天津赛区网赛的题目,想了好久,也没能想出来 还是小杰思路敏捷,给我讲解了一番,才让我把这个题做出来 f(x)=x-phi(x)(1——x与x互素个数)-g(x)(x的因子个数)+1 其中g( ...
- hdu 4279 Number(G++提交)
打表找规律: #include<stdio.h> #include<math.h> #define N 250 bool judge(int i,int j) { ;k< ...
- HDU 1005 Number Sequence(数论)
HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, ...
- HDU 1711 Number Sequence(数列)
HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- HDU 1005 Number Sequence(数列)
HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 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] + ...
随机推荐
- js函数使用prototype和不适用prototype的区别
js中类定义函数时用prototype与不用的区别 原创 2017年06月05日 12:25:41 标签: 函数 / prototype / class 首先来看一个实例: function Li ...
- 训练赛-Building Numbers
题意:首先告诉你,一个数字从1开始有两种变换方式:1.当前数字的值加1 2.当前的数字值乘2: 思路:首先把数组里的数字需要的变换次数算出来,然后用前缀和解决: 代码: #include<ios ...
- redis知识汇总
redis是一个内存数据库,使用key-value形式在内存中管理数据. 一.redis使用场景 1.热数据存储.对于需要频繁读写的数据,可以放到redis中,不用频繁的请求数据库.再设置策略持久化到 ...
- Nginx memcached应用层反向代理
L:105 Module ngx_http_memcached_module 模块默认编译进Nginx
- Matplotlib学习---用seaborn画联合分布图(joint plot)
有时我们不仅需要查看单个变量的分布,同时也需要查看变量之间的联系,这时就需要用到联合分布图. 这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图 ...
- 二叉搜索树(BST)详解
前言:平衡树的前置知识吧 二叉搜索树的定义: 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根节点的值: (2)若右子树不空,则右子 ...
- hiho1257 Snake Carpet
题目链接:http://hihocoder.com/problemset/problem/1257 题目大意:有n条蛇 编号为1-n 每条蛇的长度跟编号相等 奇数编号的蛇必须拐奇数次(除了第一条)偶数 ...
- su命令详解
-----------------------------------------------------------------su 权限设置[root@localhost ~]# vim /etc ...
- 存在重复元素 II
题目描述 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示例 1: 输入: n ...
- Anaconda换源小记
如果还没有安装可以参考:https://www.cnblogs.com/dotnetcrazy/p/9158715.html 一键更新所有库:conda update --all 清华的源有时候有点小 ...