51nod 1192 Gcd表中的质数
来源:互联网 发布:网络蜘蛛与源代码 编辑:程序博客网 时间:2024/05/22 00:29
有一个M * N的表格,行与列分别是1 - M和1 - N,格子中间写着行与列的最大公约数Gcd(i, j)(1 <= i <= M, 1 <= j <= N)。
例如:M = 5, n = 4。
1 2 3 4 5
1 1 1 1 1 1
2 1 2 1 2 1
3 1 1 3 1 1
4 1 2 1 4 1
给出M和N,求这张表中有多少个质数。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行2个数M,N,中间用空格分隔,表示表格的宽和高。(1 <= M, N <= 5 * 10^6)
Output
共T行,每行1个数,表示表格中质数的数量。
Input示例
2
10 10
100 100
Output示例
30
2791
分析:
容易想到是枚举质数p,然后推导公式。然而就是这么做。
推导:
默认n<=m
[s]表示如果s为真,则表达是为1,[p]表示p为质数是为1,否则为0;
令
如
理解起来也比较直观。接着就可以递推。
/************************************************************************* > File Name: 1192.cpp > Author: kelvin > Mail: 444051232@qq.com > Created Time: 2016年05月18日 星期三 10时49分45秒 ************************************************************************/#include<bits/stdc++.h>using namespace std;#define REP(i,a,b) for(int i=a;i<b;++i)#define LL long long#define mset(a,b) memset(a,b,sizeof a)#define scan(n) scanf("%d",&n)const int maxn = 5000006;const int mod = 1000000007;int prime[maxn];LL f[maxn];int mu[maxn];void getP(){ mu[1]=1; REP(i,2,maxn){ if(!prime[i]){ prime[++prime[0]]=i; mu[i]=-1; f[i]=1; } for(int j=1;j<=prime[0] && (LL)prime[j]*i<maxn;++j){ prime[i*prime[j]]=1; if(i%prime[j]) { f[i*prime[j]]=mu[i]-f[i]; mu[i*prime[j]]=-mu[i]; } else{ f[i*prime[j]]=mu[i]; break; } } } REP(i,2,maxn) f[i]+=f[i-1];}LL getans(int n,int m){ LL ret=0; for(int d=1,j;d<=n;d=j+1){ j=min(m/(m/d),n/(n/d)); ret+=(LL)(n/d)*(m/d)*(f[j]-f[d-1]); } return ret;}int main(){ getP(); int t; scan(t); int m,n; while(t--){ scanf("%d%d",&m,&n); if(n>m) swap(n,m); LL ans=getans(n,m); cout<<ans<<endl; } return 0;}
0 0
- 51nod 1192 Gcd表中的质数
- 【51NOD 1192】Gcd表中的质数
- 51Nod-1192-Gcd表中的质数
- Gcd表中的质数 51Nod
- 51nod 1192 Gcd表中的质数 莫比乌斯反演
- 51nod 1192GCD表中的质数(莫比乌斯反演+双分块)
- 51 nod 质数中的质数
- [51nod1192]gcd表中的质数
- 51nod 1181 质数中的质数
- 51Nod 1181-质数中的质数(质数筛法)
- 51nod 1181 质数中的质数(质数筛法)
- 51nod 1181 质数中的质数(质数筛法)
- 51 nod 1181 质数中的质数(质数筛法)
- 51nod--1181 质数中的质数(质数筛法)
- 51NOD 1181质数中的质数(质数筛法)
- 51nod 1181 质数中的质数(质数筛法)
- 51nod-【1181 质数中的质数(质数筛法)】
- 51nod 1181 质数中的质数(质数筛法)
- acm 2016/5/18 hpu15级练习 B
- 程序员的职业规划
- ofbiz
- linux下touch修改文件的时间戳
- Git和SourceTree合用
- 51nod 1192 Gcd表中的质数
- VR 虚拟现实
- 大数据日知录--数据分片与路由
- HardFault定位步骤
- Android开发进阶:使用依赖注入函数库Roboguice
- IOS开发 CGAffineTransform相关函数
- FreeMarker表达式
- js file img 操作
- kernelBase 中有关 Package 的部分