Gcd反应堆 (pgcd)
Gcd反应堆 (pgcd)
题目描述
不知什么时候起,TA突然对gcd产生了浓厚的兴趣,于是他为此编写了个程序,输入分别不大于m,n (1<m,n<=10^7)的两个数,就能得出gcd(m,n)!TA兴奋之余,给这个程序起了个酷(zhuang)雅(bi)的名字:gcd反应堆。
现在TA要做一项伟大的科学实验,需要大量素数,他打算生成素数这种任务就交给他的反应堆实现。现在TA问你,多少对在他反应堆承载范围内的整数对i,j (1<i<=m,1<=j<=n),生成的数是他所需要的原料呢?
输入
本题包含多组数据,第一行包含一个整数t,表示数据组数。
接下来T行,每行两个整数m,n,意义为题目所述。
输出
输出T行,每行一个整数,为满足(1<i<=m,1<=j<=n)且gcd(i,j)为素数的整数对(i,j)的个数。
【数据规模】
对于30%的数据,m,n<=10^3
对于70%的数据,m,n<=10^5
对于100%的数据额,m,n<=10^7,T<=10
solution
题目求
先枚举质数p
除掉p
套用反演的式子
先枚举gcd
后面可以O(1)算,前面O(n)预处理mu
效率O(nlogn)
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int T,n,m,mu[10000007],pri[10000007],tot;
bool flag[10000007];
int main()
{
int Max=10000000;mu[1]=1;
for(int i=2;i<=Max;i++){
if(!flag[i]){mu[i]=-1;pri[++tot]=i;}
for(int j=1;j<=tot&&i<=Max/pri[j];j++){
flag[i*pri[j]]=1;mu[i*pri[j]]=-mu[i];
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
}
}
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
if(n<m)swap(n,m);
long long ans=0;
for(int i=1;i<=tot&&pri[i]<=m;i++){
int p=pri[i];
for(int d=1;p<=m/d;d++){
ans=ans+(1LL)*mu[d]*(n/(p*d))*(m/(p*d));
}
}
cout<<ans<<endl;
}
return 0;
}
Gcd反应堆 (pgcd)的更多相关文章
- SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)
4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the results of ...
- SPOJ - PGCD Primes in GCD Table(莫比乌斯反演)
http://www.spoj.com/problems/PGCD/en/ 题意: 给出a,b区间,求该区间内满足gcd(x,y)=质数的个数. 思路: 设f(n)为 gcd(x,y)=p的个数,那么 ...
- * SPOJ PGCD Primes in GCD Table (需要自己推线性筛函数,好题)
题目大意: 给定n,m,求有多少组(a,b) 0<a<=n , 0<b<=m , 使得gcd(a,b)= p , p是一个素数 这里本来利用枚举一个个素数,然后利用莫比乌斯反演 ...
- bzoj 2818: Gcd GCD(a,b) = 素数
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1566 Solved: 691[Submit][Status] Descript ...
- 【HDU4947】GCD Array (莫比乌斯反演+树状数组)
BUPT2017 wintertraining(15) #5H HDU- 4947 题意 有一个长度为l的数组,现在有m个操作,第1种为1 n d v,给下标x 满足gcd(x,n)=d的\(a_x\ ...
- SPOJ4491. Primes in GCD Table(gcd(a,b)=d素数,(1<=a<=n,1<=b<=m))加强版
SPOJ4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the result ...
- Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用
OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...
- iOS 多线程之GCD的使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
- 【swift】BlockOperation和GCD实用代码块
//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...
随机推荐
- Spring Cloud 入门 Consul-Server服务注册
前面见过 Eureka服务注册,需要单独启用一个springboot项目 :这里介绍一个 spring cloud consul 服务, 只需要安装相关客户端,启动它就行: 1.安装Consul(以 ...
- ethereum(以太坊)(九)--global(全局函数)
pragma solidity ^0.4.0; contract modifierTest{ bytes32 public blockhash; address public coinbase; ui ...
- 【yii】【php】自定义故障代码
实际状态码: 200 操作成功 406 账号密码错误 208 请勿重复操作 401 需登陆验证 405 不容许此方法 409 验证错误
- C语言实例解析精粹学习笔记——29
题目: 将字符行内单字之间的空格平均分配插入到单字之间,以实现字符行排版.也就是输入一个英文句子,单词之间的空格数目不同,将这些空格数平均分配到单词之间,重新输出. 代码如下(是原书中配套的代码,只是 ...
- POJ:3684-Physics Experiment(弹性碰撞)
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3392 Accepted: 1177 Sp ...
- [Bzoj1037][ZJOI2008]生日聚会(DP)
Description 题目链接 Solution 这题状态比较难想, \(dp[i][j][g][h]\)表示强i个人有j个男生,在某个区间男生最多比女生多g人,女生最多比男生多h人的方案数,然后D ...
- 通过aop添加日志管理
1.使用spring 的 aop 技术切到自定义注解上,所以先创建一个自定义注解类 import java.lang.annotation.*; @Target(ElementType.METHOD) ...
- 内置函数--sorted,filter,map
sorted() 排序函数. 语法: sorted(Iterable, key=None, reverse=False) Iterable: 可迭代对象; key: 排序规则(排序函数); reve ...
- Android开发——View滑动冲突解决方案
0. 前言 我们在Android开发--事件分发机制详解中深入学习了事件分发机制,为我们解决Android开发中的滑动冲突问题做了初步准备.针对滑动冲突这里给出两种解决方案:外部拦截法和内部拦截法 ...
- 3226: [Sdoi2008]校门外的区间
链接 思路 bug漫天飞... 维护一颗线段树,支持区间赋值,和区间异或.因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下. U ...