LightOJ 1336 - Sigma Function
原题链接 基础数论中很经典的一道题
题意
给出了σ(n)的计算公式,让你找出整数1~n中有多少对应σ(n)的值是偶数.
思路
观察σ(n)的公式发现,每一个乘项都是 (piei+1 - 1) / (pi - 1) 这样,类比等比数列前n项和公式:
(piei+1 - 1) / (pi - 1) = (1 - piei+1) / (1 - pi) = 1 + pi + pi2 + ... + piei
即 σ(n) = ∏(1 + pi + pi2 + ... + piei)
题目要找σ(n)是偶数的值,我们进一步思考如何保证σ(n)是偶数,能否通过上面得到的乘项来确定σ(n)的奇偶性?
我们首先知道奇数运算有一个性质: 做乘法运算时,只有奇数乘奇数才可以的到奇数.
显然利用奇数来讨论会更加容易,我们可以先找到使σ(n)为奇数的情况数,再用总数减去即可得到偶数的情况数.
利用上面的性质可知,若σ(n)是奇数,则每一个乘项(1 + pi + pi2 + ... + piei)必须全为奇数.
因此可做下面的讨论:
从质因子p入手,我们知道任何除2以外的质数都是奇数.
1. 若质因子中不存在 pi = 2,则 pi必为奇数,pi的幂也必为奇数,
要使(1 + pi + pi2 + ... + piei)为奇数,需保证ei为偶数(确保偶数个奇数项相加,再加1及为奇数)
又因为n = p1e1 * p2e2 * ... * pkek,ei是偶数,则n必为一个完全平方数.
2. 若质因子中存在一个 pi = 2,
则pi = 2对应的乘项必为奇数,无论ek是奇数还是偶数.
然后需保证其他所有乘项为奇数.
n = p1e1 * p2e2 * ... * pkek,
若pi = 2对应ek为偶数,则n必为一个完全平方数.
若pi = 2对应ek为奇数,那么n再除以一个2后,n必为完全平方数.
综合以上两种情况后,我们只需统计1~n中所有的完全平方数以及除以2以后是完全平方数的数之和,再用n减去即可得到最终答案.
代码
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin >> t;
for (int i = ; i <= t; i++) {
ll n;
cin >> n;
ll ans = n;
ans -= (ll)sqrt(n) + (ll)sqrt(n / 2.0);
printf("Case %d: %lld\n", i, ans);
}
return ;
}
LightOJ 1336 - Sigma Function的更多相关文章
- LightOJ - 1336 - Sigma Function(质数分解)
链接: https://vjudge.net/problem/LightOJ-1336 题意: Sigma function is an interesting function in Number ...
- LightOJ 1336 Sigma Function 算数基本定理
题目大意:f(n)为n的因子和,给出 n 求 1~n 中f(n)为偶数的个数. 题目思路:算数基本定理: n=p1^e1*p2^e1 …… pn^en (p为素数): f(n)=(1+p1+p1^2+ ...
- LightOJ 1336 Sigma Function(数论 整数拆分推论)
--->题意:给一个函数的定义,F(n)代表n的所有约数之和,并且给出了整数拆分公式以及F(n)的计算方法,对于一个给出的N让我们求1 - N之间有多少个数满足F(x)为偶数的情况,输出这个数. ...
- LightOJ - 1336 Sigma Function(约数和+整数拆分)
题干中给出函数公式: 其中pi为n的每个素因数,ei为其个数.设该函数为F(x),其意义为x的约数之和.问在1-n中有多少x,令F(x)为偶数. 分析:设f(p)为(p^(e+1)-1)/(p-1). ...
- LightOJ 13361336 - Sigma Function (找规律 + 唯一分解定理)
http://lightoj.com/volume_showproblem.php?problem=1336 Sigma Function Time Limit:2000MS Memory L ...
- 1336 - Sigma Function
1336 - Sigma Function PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB S ...
- light oj 1336 sigma function
常用的化简方法(高中就常用了): p^(e+1)-1/p-1= [ p^(e+1) -p + (p-1) ]/ (p-1) = p*(p^e-1)/(p-1) + 1 ...
- LightOJ1336 Sigma Function —— 质因子分解、约数和为偶数
题目链接:https://vjudge.net/problem/LightOJ-1336 1336 - Sigma Function PDF (English) Statistics Forum ...
- 1336 - Sigma Functio
1336 - Sigma Function Sigma function is an interesting function in Number Theory. It is denoted by t ...
随机推荐
- 关于字符,字节与base64编码的理解
字符是用来显示的,如中文字符,英文字符,其类型我字符(串)类型: 字节是用来存储的,一个字节为8bit.由于字节是8位,无法对中文编码,因此诸如a=b'中文'的写法是错误的.但英文标点数字是可以的,如 ...
- 利用Python进行文章特征提取(二)
本篇blog是利用Python进行文章特征提取的续篇,主要介绍构建带TF-IDF权重的文章特征向量. In [1]: # 带TF-IDF权重的扩展词库 # 在第一篇文档里 主要是利用词库模型简单判断单 ...
- Qt Create 4.6.2无法自动生成Android Kit
开发环境: OS,Microsoft Windows [Version 10.0.17134.523] Qt,5.11.1 Qt Creator,4.6.2 JDK,1.8.0_181 Android ...
- gulp之压缩图片
//先全局安装gulp:npm install -g gulp //然后在项目根目录中安装gulp依赖:npm install --save-dev gulp //http://www.gulpjs. ...
- BZOJ3680:吊打XXX
我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 我对爬山的理解:https://www.cnblogs.com/AKMer/p/95552 ...
- web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)
一.什么是溢出攻击 首先, 溢出,通俗的讲就是意外数据的重新写入,就像装满了水的水桶,继续装水就会溢出,而溢出攻击就是,攻击者可以控制溢出的代码,如果程序的对象是内核级别的,如dll.sys文件等,就 ...
- play 学习 一 : 构建SBT的play项目
因为帮一个朋友做一个简单的项目,档案管理.同时也为了自己能学习PLay框架,所以记录一下. 项目GitHub地址: https://github.com/liufeiSAP/ArchiveManage ...
- TS学习之Symbol
symbol成为了一种新的原生类型,就像number和string一样(意思是可以像string一样,作为对象的属性等) Symbols是不可改变且唯一的 //symbol通过Symbol函数构造,但 ...
- PopupWindow 从底部弹出窗体
第一步 : 初始化PopupWindow private void initPop() { if (view == null) { // 照片 view = View.inflate(Registe ...
- Java基础——java中String、StringBuffer、StringBuilder的区别
(转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...