原题链接 基础数论中很经典的一道题

题意

给出了σ(n)的计算公式,让你找出整数1~n中有多少对应σ(n)的值是偶数.

思路

观察σ(n)的公式发现,每一个乘项都是 (piei+1 - 1) / (p- 1) 这样,类比等比数列前n项和公式:

(piei+1 - 1) / (p- 1) = (1 - piei+1) / (1 - pi) = 1 + pi + pi+ ... + piei

即 σ(n) = ∏(1 + pi + pi+ ... + piei)

题目要找σ(n)是偶数的值,我们进一步思考如何保证σ(n)是偶数,能否通过上面得到的乘项来确定σ(n)的奇偶性?

我们首先知道奇数运算有一个性质: 做乘法运算时,只有奇数乘奇数才可以的到奇数.

显然利用奇数来讨论会更加容易,我们可以先找到使σ(n)为奇数的情况数,再用总数减去即可得到偶数的情况数.

利用上面的性质可知,若σ(n)是奇数,则每一个乘项(1 + pi + pi+ ... + piei)必须全为奇数.

因此可做下面的讨论:

从质因子p入手,我们知道任何除2以外的质数都是奇数.

1. 若质因子中不存在 pi = 2,则 pi必为奇数,pi的幂也必为奇数,

 要使(1 + pi + pi+ ... + piei)为奇数,需保证ei为偶数(确保偶数个奇数项相加,再加1及为奇数)

又因为n = p1e1 * p2e2 * ... * pkekei是偶数,则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的更多相关文章

  1. LightOJ - 1336 - Sigma Function(质数分解)

    链接: https://vjudge.net/problem/LightOJ-1336 题意: Sigma function is an interesting function in Number ...

  2. 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+ ...

  3. LightOJ 1336 Sigma Function(数论 整数拆分推论)

    --->题意:给一个函数的定义,F(n)代表n的所有约数之和,并且给出了整数拆分公式以及F(n)的计算方法,对于一个给出的N让我们求1 - N之间有多少个数满足F(x)为偶数的情况,输出这个数. ...

  4. LightOJ - 1336 Sigma Function(约数和+整数拆分)

    题干中给出函数公式: 其中pi为n的每个素因数,ei为其个数.设该函数为F(x),其意义为x的约数之和.问在1-n中有多少x,令F(x)为偶数. 分析:设f(p)为(p^(e+1)-1)/(p-1). ...

  5. LightOJ 13361336 - Sigma Function (找规律 + 唯一分解定理)

    http://lightoj.com/volume_showproblem.php?problem=1336 Sigma Function Time Limit:2000MS     Memory L ...

  6. 1336 - Sigma Function

    1336 - Sigma Function   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB S ...

  7. 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  ...

  8. LightOJ1336 Sigma Function —— 质因子分解、约数和为偶数

    题目链接:https://vjudge.net/problem/LightOJ-1336 1336 - Sigma Function    PDF (English) Statistics Forum ...

  9. 1336 - Sigma Functio

    1336 - Sigma Function Sigma function is an interesting function in Number Theory. It is denoted by t ...

随机推荐

  1. 《java编程思想》:字符串

    1.String对象是不可变的,String类中每个看起来会修改String值的方法,实际上都是创建了一个新的String对象,来包含修改后的内容,所以在对String修改后,想打印新的值,可以直接打 ...

  2. ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...

  3. Django来敲门~第一部分【4. 创建第一个模块应用】

    成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 ——老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配 ...

  4. C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?

    如何获取二维数组中的元素个数呢? int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组int row = array. ...

  5. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  6. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

    转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(b ...

  7. windows 创建和调用 动态库,静态库

    windows创建和调用静态库 // MathFuncsLib.h namespace MathFuncs { class MyMathFuncs { public: // Returns a + b ...

  8. 拖动调整div布局大小

    一.需求 实现类似windows软件的那种,拖动调整两个div的大小 二.结果示例: 三.示例代码: https://github.com/CinYung/jQuery.divResizer.git

  9. Jquery隐藏相同name的div

    $("div:[name=divName]").hide(); divName(自己div的Name)

  10. SAP 销售订单中采购标识无法修改

    VA03中的销售订单第四个物料没有ZA选项, 错误提示:计划行类别ZA未定义 原因: MM03中的 MRP2---采购类型未被定义