/*
题目大意:在一个n*m的方格中一个人站在(0,0),每个方格都有树,求他能看到多少颗树
设某点的坐标为(x,y),则求的是x/y的不同数目,那么问题就转换成了求两个区间内的互质的对数
如果可以约分,那么他们约分后的互质在前面已经计算过了
*/
//求区间[a,b]与[a,b]互质数多少对
#include<cstdio>
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
const int mx=100005;
int n,a,b;
vector<int> x[mx];
int vis[mx];
void prime()
{
//预处理1~mx内的数的素因子
for(int i=2;i<mx;++i)
if(!vis[i])
{
for(int j=i;j<mx;j+=i)
{
vis[j]=1;
x[j].push_back(i);
}
}
}
int solve(int a,int p)
{
//求区间[1,a]与p互质的数的个数
int ans=a;
for(int i=1;i<(1<<x[p].size());++i)
{
int cnt=0,k=1;
for(int j=0;j<x[p].size();++j)
if(
hdu2841(容斥原理+分解质因数)Visible Trees
最新推荐文章于 2024-08-05 21:06:26 发布