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 ...
随机推荐
- C++内存使用机制基本概念详解
.程序使用内存区 一个程序占用的内存区一般分为5种: ()全局.静态数据区:存储全局变量及静态变量(包括全局静态变量和局部静态变量) ()常量数据区:存储程序中的常量字符串等. ()代码区:存储程序的 ...
- SPOJ8093Sevenk Love Oimaster(广义后缀自动机)
Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXun was da ...
- L1-039 古风排版(20 分)
中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数.第二行给出一个长度不超过1000的非空 ...
- pytorch 调用forward 的具体流程
forward方法的具体流程: 以一个Module为例:1. 调用module的call方法2. module的call里面调用module的forward方法3. forward里面如果碰到Modu ...
- Java中CountDownLatch类的使用
0.CountDownLatch作用 1) Java api中的解释:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 2) CountDownLatch可以使J ...
- 标准模板库(STL)学习指南之vector向量
vector – 一. vector可以模拟动态数组 – 二. vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public 拷贝构造函数和重载的赋值操作符) 三.必须包含的头文 ...
- Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
一.Description The most important part of a GSM network is so called Base Transceiver Station (BTS). ...
- POJ(2186)强连通分量分解
#include<cstdio> #include<vector> #include<cstring> using namespace std; ; vector& ...
- 一个有关Golang变量作用域的坑
转自:http://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/ 临近下班前编写和调试一段Golang代码,但运行结果始终 ...
- LAMP 1.2 Apache编译安装问题解决
这个错误安装 yum install -y gcc error: mod_deflate has been requested but can not be built due to prerequi ...