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 ...
随机推荐
- Linux平台下卸载MySQL的方法
转载自: https://www.cnblogs.com/taomylife/p/7234925.html Linux平台下卸载MySQL的方法: MySQL的安装主要有三种方式:二进制包安装.RPM ...
- django+xadmin在线教育平台(八)
4-5 user modesl.py设计 循环引用: 设计app时每个app都有model mark 如图:我们在user中定义usercourse记录用户学习的课程.会有两个外键:user和co ...
- 46个Linux面试常见问题
问题一: 绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 答案:绝对路径: 如/etc/init.d当前目录和上层目录: ./ ../主目录: ~/切 ...
- Java中使用webSocket
Java中使用webSocket package com.yaoqi.controller.message; import javax.websocket.*; import javax.websoc ...
- echarts零基础快速入门
第一步:得到这个dom对象.然后进行各种操作. var myChart = echarts.init(document.getElementById('item1')); 第二步:所有的配置项全部放在 ...
- Matplotlib 图表的基本参数设置
1.图名,图例,轴标签,轴边界,轴刻度,轴刻度标签 # 图名,图例,轴标签,轴边界,轴刻度,轴刻度标签等 df = pd.DataFrame(np.random.rand(10,2),columns= ...
- Hadoop环境搭建 (伪分布式搭建)
一,Hadoop版本下载 建议下载:Hadoop2.5.0 (虽然是老版本,但是在企业级别中运用非常稳定,新版本虽然添加了些小功能但是版本稳定性有带与考核) 1.下载地址: hadoop.apache ...
- Android Stadio 相关
这几天,电脑坏了.重装系统,慢慢的学到了很多Android stadio 的相关知识.总结一下吧: 1.gradle 编译工具:在工程的gradle/wrapper/gradle–wrapper.pr ...
- 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失
1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...
- 关于safaire下hash前面需要加/(正斜杠)
就是我们1.1框架是根据hash跳转的,今天我2.0跳转到1.1,pc一直测下来都是好的, 然后发现手机上一直跳转有问题,然后排查了半小时左右才发现 hash前面需要加/ 分割. 例如:http:/ ...