hdu 2608 (数论)
hdu2608 0 or 1
题意:给你一个数N(N < 2^31), 问从 1--N 所有数的因子和S(N),求 S(N)%2 的值。
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2608
思路:参考了下其它博客,自己总结如下:
对于每一个数N,我们可以将其拆分为 N = 2^e1 * p2^e2 * p3^e3 * ... * pm^em (e1可能是0)。其中p1, p2... 都是 N 质因子。因为 N = 2^e1 * p2^e2 * p3^e3 * ... * pm^em ,我们可以的得到:
T[N]= [ ( 2^0+2^1+...+2^e1 ) * ( p2^1+p2^2+...+p2^e2 ) * ... * ( pm^0+pm^1+...+pm^em ) ]% 2;
( N的因子数有K个, K = (e1+1) * (e2+1) * ... * (em+1),排列组合原理,大家可以随便模拟一个数);
我们知道 ( 2^0+2^1+...+2^e1 )% 2 = 1 恒成立(因为有2^0=1),所以T[N]的值只取决与后面的乘式%2 是否出现了0,那么后面的式子怎样才会是零呢?很简单,因为所有的质素都是奇数,所以当除2以外的存在某一个质因子表达式为偶数项的时候就会为零了(偶数个奇数相加为偶数),也即只要满足至少存在一个 ei 的值为奇数(质因数 pi 项数为 ei- 0+ 1)。当然这题中,我们不会去直接计算为 0 的 T[i] 有多少多,这很困难,而是从反面求解,即计算 T[i] 为 1 的数的个数,这样,求 S[N] 也就转化为从 1-N 有多少个 T[i] 为1。回到前面,如果 T[i] 为 1,那么除了 2 之外所有质因子的 ei 都为偶数,这个条件就很好解决了,而不像前面的求解满足至少一项 ei 为奇数,既然除了 2 之外所有的 ei 都为偶数,所以:
i = 2^2k1 * p2^2k2 * p3^2k3 * ... * pm^2km = (2^k1 * P2^k2 * P3^k3 * ... * pm^km)^2 = x^2 ......(1)
或:i = 2^2k1+1 * p2^2k2 * p3^2k3 * ... * pm^2km = 2*(2^k1 * P2^k2 * P3^k3 * ... * pm^km)^2 = 2 * x^2 ......(2)
那么这个数一定会是 i = x^2 或者是 i= 2* x^2 的形式。所以统计从 1-N 之间有多少个满足 T[i] = 1 数吧。
那么 N 以内的数满足 (1) 和 (2) 式子的有多少呢?
首先,看一下满足(1)式子的个数: s1 = sqrt(n) 取下整,所以 : s1 = (int)sqrt(n*1.0) ;
然后,再看一下满足(2)式子的个数: s2 = sqrt(n/2.0) 取下整,所以 : s2 = (int)sqrt(n/2.0) 。
所以,1--N 内满足 T[i] = 1 的个数有 s1 + s2 个。
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std; int main()
{
int t, n;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
printf("%d\n",((int)sqrt(n*1.0)+(int)sqrt(n/2.0))&);
}
return ;
}
hdu 2608 (数论)的更多相关文章
- HDU 2608 底数优化分块 暴力
T(n) as the sum of all numbers which are positive integers can divied n. and S(n) = T(1) + T(2) + T( ...
- GCD and LCM HDU 4497 数论
GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...
- HDU 4497 数论+组合数学
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 解题思路:将满足条件的一组x,z,y都除以G,得到x‘,y',z',满足条件gcd(x',y' ...
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...
- hdu 4961 数论?
http://acm.hdu.edu.cn/showproblem.php?pid=4961 给定ai数组; 构造bi, k=max(j | 0<j<i,a j%ai=0), bi=ak; ...
- hdu 1664(数论+同余搜索+记录路径)
Different Digits Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 3641 数论 二分求符合条件的最小值数学杂题
http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...
- hdu 4059 数论+高次方求和+容斥原理
http://acm.hdu.edu.cn/showproblem.php? pid=4059 现场赛中通过率挺高的一道题 可是容斥原理不怎么会.. 參考了http://blog.csdn.net/a ...
- HDU 4651 数论 partition 求自然数的拆分数
别人的解题报告: http://blog.csdn.net/zstu_zlj/article/details/9796087 我的代码: #include <cstdio> #define ...
随机推荐
- HPUX 配置zabbix开机自动启动
1. 在/etc/rc.config.d目录下创建zabbixd文件,并增加以下内容: #!/sbin/sh # v1.0 ?zabbixd startup/kill config ...
- 关于kv的jch分片存储
确定节点同步一致 节点启动之后,先获取本地的addrbook里面的节点信息 根据获取的addrbook里面的节点信息进行校验(向addrbook里面的节点发送hash消息确认,如果都一样,则可以广播数 ...
- ES6的新特性(3)——变量的解构赋值
变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; le ...
- css 元素水平垂直方向居中
html部分 <div class="parent"> <div class="child"> - -居中- - </div> ...
- Python:集合操作总结
集合是一组无序排列的不重复元素集 [注]:集合的最大作用是对一个序列进行去重操作 一.集合的分类 在Python中集合分为两类,为可变集合(set)和不可变集合(frozenset).对于可变集合(s ...
- Alpha-7
前言 失心疯病源7 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 18:30~20:30 通过统计法来得出人车团块的区别和鉴别方法,然而效果并不显著 代码签 ...
- lintcode-457-经典二分查找问题
457-经典二分查找问题 在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1 样例 给出数组 [1, 2, 2, 4, 5, 5]. 对于 target = 2, 返回 1 或者 ...
- DEBUG_NEW和THIS_FILE
C++ 的一个 比较晦涩难懂的特点是你可以重载 new 操作符,并且你甚至可以给它附加参数.通常,操作符 new 只接受拟分配对象的大小: void* operator new(size ...
- PAT 甲级 1040 Longest Symmetric String
https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ...
- 如何在java中实现跨线程的通讯
一般而言,如果没有干预的话,线程在启动之后会一直运行到结束,但有时候我们又需要很多线程来共同完成一个任务,这就牵扯到线程间的通讯. 如何让两个线程先后执行?Thread.join方法 private ...