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.
例子输入
3
1 2 3
例子输出
3

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

分析:

fr=aladdin">莫比乌斯反演。

此题中,设F(d)表示n个数中gcd为d的倍数的数有多少对,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<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int MAXN = 1e5 + 10;
typedef long long LL;
int cnt[MAXN], pri[MAXN], num[MAXN], pri_num, mu[MAXN], 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 < pri_num; j++) {
if(i * pri[j] > n) break;
vis[i*pri[j]] = 1;
if(i % pri[j] == 0) {
mu[i*pri[j]] = 0;
break;
}
mu[i*pri[j]] = -mu[i];
}
}
} LL get(int x)
{
return (LL)x * (x-1) / 2;
} int main()
{
mobius(100005);
int n;
while(~scanf("%d",&n)) {
int mmax = 0;
for(int i = 1; i <= n; i++) {
scanf("%d",&a[i]);
mmax = max(mmax, a[i]);
}
memset(cnt, 0, sizeof(cnt));
memset(num, 0, sizeof(num));
for(int i = 1; i <= n; i++) num[a[i]]++;
for(int i = 1; i <= mmax; i++)
for(int j = i; j <= mmax; j += i)
cnt[i] += num[j];
LL ans = 0;
for(int i = 1; i <= mmax; i++)
ans += get(cnt[i]) * mu[i];
printf("%lld\n", ans);
}
return 0;
}

NYOJ 1066 CO-PRIME(数论)的更多相关文章

  1. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)

    参考链接http://blog.csdn.net/acm_cxlove/article/details/8264290http://blog.csdn.net/w00w12l/article/deta ...

  2. UVA 1415 - Gauss Prime(数论,高斯素数拓展)

    UVA 1415 - Gauss Prime 题目链接 题意:给定a + bi,推断是否是高斯素数,i = sqrt(-2). 思路:普通的高斯素数i = sqrt(-1),推断方法为: 1.假设a或 ...

  3. 省常中模拟 Test4

    prime 数论 题意:分别求 1*n.2*n.3*n.... n*n 关于模 p 的逆元.p 是质数,n < p. 初步解法:暴力枚举.因为 a 关于模 p 的逆元 b 满足 ab mod p ...

  4. 【HDU】2866:Special Prime【数论】

    Special Prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. POJ 1365 Prime Land(数论)

    题目链接: 传送门 Prime Land Time Limit: 1000MS     Memory Limit: 10000K Description Everybody in the Prime ...

  6. 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test

    Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 29046   Accepted: 7342 Case ...

  7. 数论 - 素数的运用 --- poj 2689 : Prime Distance

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12512   Accepted: 3340 D ...

  8. codeforces 680C C. Bear and Prime 100(数论)

    题目链接: C. Bear and Prime 100 time limit per test 1 second memory limit per test 256 megabytes input s ...

  9. Prime Ring Problem + nyoj 素数环 + Oil Deposits + Red and Black

    Prime Ring Problem Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) ...

随机推荐

  1. shell脚本中每次读取文件的一行

    写法一: #!/bin/bash while read linedo      echo $line     #这里可根据实际用途变化 done < file          #需要读取的文件 ...

  2. Hdu 1175 连连看(DFS)

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 因为题目只问能不能搜到,没问最少要几个弯才能搜到,所以我采取了DFS. 因为与Hdu ...

  3. HDU 1573 X问题 中国剩余定理

    链接:pid=1573">http://acm.hdu.edu.cn/showproblem.php? pid=1573 题意:求在小于等于N的正整数中有多少个X满足:X mod a[ ...

  4. 如何将一个Jsp网站打包发布(发布为War文件)

    链接地址:http://blog.csdn.net/luohuijun619/article/details/4867131 版权声明:本文为博主原创文章,未经博主允许不得转载. 网站做完后,并不是直 ...

  5. CentOS的配置文件

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  6. or1200构建sopc系统之软件环境搭建

    使用预先编译好的工具链 下载: ftp://ocuser:oc@195.67.9.12/toolchain/or32-elf-linux-x86.tar.bz2 解压 tar xjf or32-elf ...

  7. Android中Drawable分类汇总(上)

    Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型.Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接 ...

  8. 【REDO】删除REDO LOG重做日志组后需要手工删除对应的日志文件(转)

    为保证重新创建的日志组成员可以成功创建,我们在删除日志组后需要手工删除对应的日志文件. 1.查看数据库当前REDO LOG日志相关信息1)查看日志组信息sys@ora10g> select * ...

  9. AngularJS_百度百科

    AngularJS_百度百科     AngularJS    编辑     AngularJS是为克服HTML在构建应用上的不足而设计的.    目录         1简介引引        端对 ...

  10. 使用Eclipse EE开发web项目

    最近使用EclipseEE开发web项目,遇到了以下几个问题: 1. 通过tomcat启动web应用的时候,总是提示找不到包或者class. 经过排查,发现所有的jar包并没有放到WEB-INF/li ...