博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CO-PRIME(初探 莫比乌斯)NYOJ1066(经典)gcd(a,b)=1
阅读量:6241 次
发布时间:2019-06-22

本文共 1296 字,大约阅读时间需要 4 分钟。

CO-PRIME

时间限制:
1000  ms  |  内存限制:
65535  KB
难度:
3
描写叙述

This problem is so easy! Can you solve it?

You are given a sequence which contains n integers a1,a2……an, your task is to find how many pair(ai, aj)(i < j) that ai and aj is co-prime.

 

输入
There are multiple test cases.
Each test case conatains two line,the first line contains a single integer n,the second line contains n integers.
All the integer is not greater than 10^5.
输出
For each test case, you should output one line that contains the answer.
例子输入
31 2 3
例子输出
3

 

 

參考学长博客 

 

题意:给出n个正整数。求这n个数中有多少对互素的数。

分析:

此题中,设F(d)表示n个数中gcdd的倍数的数有多少对,f(d)表示n个数中gcd恰好为d的数有多少对。

F(d)=f(n) (n % d == 0)

  f(d)=mu[n / d] * F(n)   (n %d == 0)

上面两个式子是莫比乌斯反演中的式子。

所以要求互素的数有多少对,就是求f(1)

而依据上面的式子能够得出f(1)=mu[n] * F(n)

所以把mu[]求出来。枚举n即可了,当中mu[i]为i的莫比乌斯函数。

 

初探莫比乌斯。还有非常多不是非常懂。跟进中。

 

转载请注明出处: 

 

题目链接:

 

#include
#include
#include
using namespace std;const int MAXN = 1e5+10;typedef long long LL;LL F[MAXN],f[MAXN];int pri[MAXN],pri_num;int mu[MAXN];//莫比乌斯函数值int vis[MAXN],a[MAXN];void mobius(int N) //筛法求莫比乌斯函数{ pri_num = 0;//素数个数 memset(vis, 0, sizeof(vis)); vis[1] = mu[1] = 1; for(int i = 2; i <=N; i++) { if(!vis[i]) { pri[pri_num++] = i; mu[i] = -1; } for(int j=0; j
你可能感兴趣的文章
清北NOIP训练营集训笔记——图论
查看>>
oracle ORA-00060死锁查询、表空间扩容
查看>>
转载自https://github.com/jsfront/src/blob/master/css.md
查看>>
MySQL索引优化分析(上)
查看>>
jquery $().each,$.each的区别
查看>>
sql server 2000/2005 游标的使用操作(转)
查看>>
Tomcat 部署 Web 通过 ip 直接访问项目
查看>>
Cache Fusion
查看>>
bzoj2502
查看>>
Xcode 控制台打印Unicode字符串转换为中文
查看>>
Codeforces 831C--Jury Marks (思维)
查看>>
oracle内存结构+系统全局区+程序全局区(pga)+排序区+大型池+java池
查看>>
成长7 - lambda,filter,map的运用
查看>>
New Concept English Two 18 46
查看>>
Qt 删除目录
查看>>
Git 移除某些文件
查看>>
poj2940
查看>>
django做form表单的数据验证
查看>>
【OpenFOAM】——OpenFOAM入门算例学习
查看>>
STL UVA 11991 Easy Problem from Rujia Liu?
查看>>