莫比乌斯函数-质因数分解

1240 莫比乌斯函数

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出。梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号。(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数)。

具体定义如下:

如果一个数包含平方因子,那么miu(n) = 0。例如:miu(4), miu(12), miu(18) = 0。

如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k。例如:miu(2), miu(3), miu(30) = -1,miu(1), miu(6), miu(10) = 1。

给出一个数n, 计算miu(n)。

Input

输入包括一个数n,(2 <= n <= 10^9)

Output

输出miu(n)。

Input示例

5

Output示例

-1

本质是质因数分解,外加判断没有重复的质因数,主要是压数据,特判2,判断到sqrt(n);代码如下:

#include<cstdio>
int main()
{
int j,n,m,nu,k(0),ans(0);
scanf("%d",&n);
if(n%4==0){
printf("0");
return 0;
}
if(n%2==0) ans=2,n/=2,k++;
for(int i=3;i<=n;){
if(i*i>n){
k++;
break;
}
if(n%i!=0) i+=2;
else {
k++;
if(ans!=i) ans=i,n/=i;
else {
printf("0");
return 0;
}}
}
if(k%2!=0) printf("-1\n");
else printf("1\n");
return 0;
}

时间: 2024-10-10 23:21:44

莫比乌斯函数-质因数分解的相关文章

51nod 1240 莫比乌斯函数 (质因数分解)

1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 取消关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因

HDU1695:GCD(容斥原理+欧拉函数+质因数分解)好题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题目解析: Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. 题目又说a==c==1,所以就是求[1,b]与[1,d]中gcd等于k的个数,因为若gcd(x,y)==z,那么gcd(x/z,y/z)==1,又因为不是z的倍数的肯定不是,所以不是z的倍数的可以直接去

HDU 1695 GCD 欧拉函数+容斥原理+质因数分解

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a <= b <= 100000, c=1, c <= d <= 100000, 0 <= k <= 100000) 思路:因为x与y的最大公约数为k,所以xx=x/k与yy=y/k一定互质.要从a/k和b/k之中选择互质的数,枚举1~b/k,当选择的yy小于等于a/k时,可以

中国MOOC_零基础学Java语言_第7周 函数_1分解质因数

第7周编程题 查看帮助 返回 第7周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个[2,10000

BZOJ 2440 中山市选 2011 完全平方数 莫比乌斯函数+二分

题目大意 给出一个数k,求第k个不是完全平方数个数的数字(这里的完全平方数并不包括1). 思路 首先介绍一下莫比乌斯函数(M?bius): μ(x)=? ? ? ? ? ? ?  1(?1) k 0 x=1能分解成k个不同的质因数的乘积其他情况 然后呢,由于莫比乌斯函数是个积性函数,于是我们就可以线性地求出所有需要的莫比乌斯函数值. 剩下的工作就是在外层套一个二分,转成判定问题,小于一个数的数字中有多少个数字不是完全平方数的倍数.这个东西用容斥乱搞一下就好了~ CODE #define _CRT

【读书笔记】莫比乌斯函数与莫比乌斯反演

一.莫比乌斯(Möbius)函数 对于每个正整数n(n ≥ 2),设它的质因数分解式为: 根据这个式子定义n的莫比乌斯函数为: 也就是如果n有平方因子,则为0. 否则是-1的质因数个数次方. 举个简单的例子:6 = 2 × 3,所以:  9 = 3×3, 所以 [命题一] 对于正整数n有: 也就是n>2时,所有n的约数对应函数值之和为0. 证明: n=1的时候是显然的. n≥2时: ① 如果d中也含有平方因子,则其值为零. ② 设 , 若d中不含平方因子,则必有. 所以有: 得证. 二.欧拉函数

数论线性筛总结 (素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛)

线性筛 线性筛在数论中起着至关重要的作用,可以大大降低求解一些问题的时间复杂度,使用线性筛有个前提(除了素数筛)所求函数必须是数论上定义的积性函数,即对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数,若a,b不互质也满足的话则称作完全积性函数,下面说明每个筛子是怎么筛的. 最基础的是素数筛,其它三个筛都是以素数筛为前提 素数筛 void get_prime() { int pnum = 0; for(int i = 2;

数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛

一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数\(\mu(n)\)为: 当n有平方因子时,\(\mu(n)=0\). 当n没有平方因子时,\(\mu(n)=(-1)^{\omega(n)}\),\(\omega(n)\)表示n不同质因子的个数. 性质1: \(\sum_{d|n}\mu(d)=[n=1]\) 证明:我们把n分解质因数,则原式\(=(-1+1)^{\omega(n)}=0\). 因为对于不同的质因子,只有选和不选两种方案,这是一个组合数相加的形式,偶数加奇数减,根据二项式

HDU 6053 TrickGCD 莫比乌斯函数/容斥/筛法

题意:给出n个数$a[i]$,每个数可以变成不大于它的数,现问所有数的gcd大于1的方案数.其中$(n,a[i]<=1e5)$ 思路:鉴于a[i]不大,可以想到枚举gcd的值.考虑一个$gcd(a_1,a_2,a_3…a_n)=d$,显然每个$a_i$的倍数都满足,有$\frac{a_i}{d}$种方案 那么一个d对答案的贡献为\[\prod_{i=1}^{min(a)}{\lfloor\frac{a_i}{d}\rfloor}    \] 但是所有的d计入会有重复情况,考虑容斥,对d进行素数分