51nod 1240 莫比乌斯函数【数论+莫比乌斯函数】
2024-09-04 13:39:49
基准时间限制: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 【分析】:
(1)如果这个数n能整除某个数的平方,那么函数值就为0;
(2)否则判断它的因子个数(k)的奇偶性,函数值为(-1)^k;
【代码】:
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<stdlib.h>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
#define exp 1e-10
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
const int N = ;
const int M = ;
const int inf = ;
const int mod = ;
int fun(int n)
{
int cnt;
int sum=;
for(int i=;i*i<=n;i++)
{
cnt=;
if(n%i==)
{
sum++;//记录质因子个数
while(n%i==)//计算因子个数
{
n=n/i;
cnt++;
}
if(cnt>=)//若此因子出现次数大于等于两次,则因子必存在i的平方
return ;
}
} if(n!=)
sum++;
return (sum%)?-:;//如果因子个数为奇数则函数值为-1 ,如果因子个数为偶数则函数值为1
}
int main()
{
int n;
while(~scanf("%d",&n))
printf("%d\n",fun(n));
return ;
}
最新文章
- android 自定义控件——(三)水平线、虚线
- SSM环境搭建(接口编程方式)
- bzoj1799: [Ahoi2009]self 同类分布
- 【BZOJ】2956: 模积和
- 变量声明提升 Vs. 函数声明提升
- 20145338 《Java程序设计》第1周学习总结
- 【转】 linux 安装nginx及编译参数详解
- U盘安装Win7 64位
- 比较js中创建对象的几种方式
- ThinkPHP函数详解:F方法
- C++注释和doxygen注释
- QtSoap调用Web Service(QtSoap是非官方应用)
- oracle设备
- IDEA关掉重复代码波浪线
- 【python 3】 函数 初识
- react-native No bundle URL present
- 浅析 PHP 中的 Generator
- CentOS7配置FTP服务器增强版~(零基础学会FTP配置)
- MI200e电力线通讯
- MYSQL获取当前年、季、月、周第一天、最后一天的日期/时间戳