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 ...
随机推荐
- nodejs stream基础知识
分类 nodejs 的 stream 有四种: Readable:可读流 Writable: 可写流 Duplex:双工流 Transform:转换流 Readable // _read方法是从底层系 ...
- stl_heap.h
stl_heap.h // Filename: stl_heap.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...
- 【leetcode刷题笔记】Reverse Linked List II
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
- nodejs 静态文件服务器
https://cnodejs.org/topic/4f16442ccae1f4aa27001071 http://blog.csdn.net/zhangxin09/article/details/8 ...
- [转]JS中apply和call的联系和区别
JS中有时常用到 apply 和 call 两个方法,搜索网上很多,整理如下,简单看看这两个联系和区别, 联系: 网上查到关于apply和call的定义:这两个方法都能劫持另外一个对象的方法,继承另外 ...
- strcmp strcpy的使用 char类型
//判断从控制台输入的密码是否正确 BOOL varifyPassWord(char passWord[] , int index) { BOOL result = YES; int count = ...
- 分享一个js技巧!判断一个变量chat_websocket是否存在。
注意!!! 判断一个变量chat_websocket是否存在:if( "undefined" == typeof(chat_websocket) || null == chat_w ...
- kvm ip查看
1.virsh --list(查看有哪些服务器) 2.virsh dumpxml 虚拟机名称 查看服务器对应的mac地址 3.然后再宿主机上arp -a 查看对应的mac地址对应的ip
- 0009_if控制语句
1.if 条件: (判断相等一定注意要用 == 而不是 =) 代码块 else: 代码块 2.if 条件一: 代码块 elif 条件二: 代码块 elif 条件三 ...
- 各种浏览器下的user-agent
ie11Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko safariMozilla/5.0 (Macintos ...