hdu4279-欧拉函数+约数个数+打表+sqrt()精度问题
来源:互联网 发布:sql里values什么意思 编辑:程序博客网 时间:2024/04/29 17:19
http://acm.hust.edu.cn/vjudge/problem/31861/origin
题目要求 对一个数n, 从【1,n】里去掉其约数,并去掉所有与其互质的数,求剩余数的个数,如果个数为奇数,则 是一个real number
求区间【X,Y】之间的real number数
先是打表发现规律,其实也蛮好证明:
首先 对一个数,与其互质的数肯定是偶数个的(根据欧拉公式可得),其次对于约数,只有平方数的约数才是奇数,其余都是偶数,
如果该数不是平方数
num = n-euler(n)-divisor(n)+1,即偶数的非平方数都是real number ,加1是因为1即使互质也是因子
如果是平方数,则只有奇数的平方数是real number
则如果要求【1,x】有多少个real number ,先求多少个偶数,再减去偶数平方数加奇数平方数
偶数就是n/2, 奇数平方数和偶数平方数,如果sqrt(n)%2,则奇数多一个,否则一样
注意sqrt(1.0*n)会爆,sqrt((double )n) 会爆,只有sqrt((long long doubel )n),才不会
或者 int x=sqrt(n), if (x*x>n) x--;
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <map>#include <set>#include <vector>#include <iostream>using namespace std;const double pi=acos(-1.0);double eps=0.000001;int num[]= {0,0,0,0,0,0,1,1,2,3}; long long cal1(long long n){ if(n<=4) return 0; long long ans=(n-4)/2; long long tmp=sqrt(n); if(tmp*tmp>n) tmp--; if(tmp%2) ans++; return ans;}int main(){ int t; cin>>t; while(t--) { long long x,y; scanf("%lld%lld",&x,&y); long long ret1=cal(x-1); long long ret2=cal(y); printf("%lld\n",ret2-ret1); } return 0;}
0 0
- hdu4279-欧拉函数+约数个数+打表+sqrt()精度问题
- hdu 4279 Number (欧拉函数 - 约数个数)
- HDU 2588 GCD 【利用欧拉函数求约数个数】
- 欧拉函数 + 约数 + 素数表 + 欧拉函数表
- 质数快速筛法;欧拉函数线性打表;因子个数,因子和打表
- 欧拉函数 打表
- 欧拉函数打表
- 欧拉函数打表
- 欧拉函数打表
- HDU 4279 2012网络赛Number(数论 欧拉函数结论约数个数)
- Tyvj P1346 MMT数(约数个数定理,欧拉函数)
- 利用欧拉函数求N的正约数的个数
- 素数 约数 欧拉函数 筛法
- hdu4983 / 枚举约数+欧拉函数
- 欧拉函数打表(备忘)
- poj3090 欧拉函数打表
- hdu2824(欧拉函数+打表)
- 【欧拉函数打表】LightOJ
- 切割回文(区间dp)
- Task schedule<hdoj4907>
- 经常利用文档与搜索引擎其实未必是好事
- Pie
- java基础——String和StringBuffe、StringBuilder
- hdu4279-欧拉函数+约数个数+打表+sqrt()精度问题
- tf2sos
- leetcode Combination Sum I/II/III/IV
- Android Camera开发分辨率相关问题总结
- template 用法(简单点一下)+送一个逗比并查集
- JAVA ArrayList和LinkedList
- 在mac下搭建svn服务
- gcvt字符串转换函数应用实例
- c