SPOJ 7001 Visible Lattice Points(莫比乌斯反演)

2024-06-01 18:38

本文主要是介绍SPOJ 7001 Visible Lattice Points(莫比乌斯反演),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

莫比乌斯反演,注意0的情况特殊考虑下就可以了

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 1000005;int mo[N], prime[N], pn;
bool vis[N];void Moblus() {memset(vis, false, sizeof(vis));mo[1] = 1; pn = 0;for(int i = 2; i < N; i++) {if(!vis[i]) {prime[pn++] = i;mo[i] = -1;}for(int j = 0; j < pn; j++) {if(i * prime[j] >= N) break;vis[i * prime[j]] = true;if(i % prime[j] == 0) {mo[i * prime[j]] = 0;break;} else mo[i * prime[j]] = -mo[i];}}
}typedef long long ll;int t, n;int main() {Moblus();scanf("%d", &t);while (t--) {scanf("%d", &n);ll ans = 3;for (int i = 1; i <= n; i++) {ans += (ll)mo[i] * (n / i) * (n / i) * (n / i);ans += (ll)mo[i] * (n / i) * (n / i) * 3;}printf("%lld\n", ans);}return 0;
}


这篇关于SPOJ 7001 Visible Lattice Points(莫比乌斯反演)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021802

相关文章

SPOJ - QTREE (树链剖分)

基础的树链剖分题目,不过是边权,可以向下映射成点权或者按边剖分。 VIEW CODE #include <iostream>#include<stdio.h>#include<cmath>#include<string.h>#include<algorithm>#include<string>using namespace std;const int mmax=100

Python星载气溶胶数据处理与反演分析

在当前全球气候变化和环境污染问题日益突出的背景下,气溶胶研究显得尤为重要。气溶胶在大气中由直径范围在0.01微米至10微米固体和液体颗粒构成,直接或间接影响地球辐射平衡、气候变化和空气质量。尤其在“碳中和”目标的驱动下,研究气溶胶对“碳中和”的气候影响及其环境效应,不仅对科学研究具有重大意义,同时也为政策制定提供了重要依据。 MODIS(中分辨率成像光谱仪)和CALIOP(云-气溶胶偏振激光雷达

android中的gone、visible、和invisible

在设置控件可见与否时,会遇到这几个参数 gone和invisible都是用来不可见的,gone表示不保留其位置,invisible为保留其位置

基于Python星载气溶胶数据处理与反演分析

原文链接:基于Python星载气溶胶数据处理与反演分析https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247606689&idx=1&sn=bcdca97812e5e21e1bf539eafa49a48b&chksm=fa826046cdf5e95059f4ebc5ae6120b8e909883dd1d7c0eb4a5897e79df1

poj 3090 Visible Lattice Points(数论:筛法打表欧拉函数)

和之前做过的一个题很像 对于size==4 从1到4考虑y坐标 不妨设x>=y y==1: (1,1) y==2: (1,2) y==3: (1, 3) (2, 3) y==4: (1, 4) (3, 4) 共6个满足条件,把x y交换下且去除(1, 1)的重复情况得到2×6-1=11 再加上(0,1) (1,0)两种情况得到13 所以结果应该为: 代码如下: #

lighoj 1088 Points in Segments | 二分

题意: 给你n个数,q个区间。让你求出每个区间所包含的数的个数。 思路: 一开始以为是线段树,不过看看数据范围,算了。。。 把n个数sort一遍,然后根据每个区间的两个边值进行二分,得出的结果相减即可。注意细节。 AC代码: #include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#in

HDU 1695 GCD 容斥原理/莫比乌斯反演

题意: 给你两个区间[a,b],[c,d],还有一个k。让你从区间[a,b]中找出x,[c,d]中找出y,问共有多少组(x,y)使得gcd(x,y)=k。 (x,y)和(y,x)算一组。 思路: 参考:http://blog.csdn.net/yang_7_46/article/details/9072533 容斥。 普通容斥: *如果gcd(x,y)=k,则gcd(x/k

HDU 2841 Visible Trees 容斥

题意(一开始也没怎么看懂): 一个人站在(0,0)处,树从(1,1)点开始排,共有m*n棵。如果两棵树在同一视线上(意思是两个点和(0,0)的斜率相同),则只看到前面一棵树,问你那个人能看到几棵树。 思路: 容斥。 简单分析之后,其实本质就是让你求gcd(x,y)=1有几组。(x,y)和(y,x)算两种。 这题和HDU 1695差不多,只不过那题(x,y)和(y,x)算一种。

python 自定义命令(entry_points)以及开发第三方库setuptools打包

突然想知道类似django-admin、you-get这种不用Python执行的自定义命令怎么实现的的,查了一下setuptools打包时配置一下entry_points可以实现。 工程结构 setup.py代码: #setup.pyfrom setuptools import setupsetup(name = "setuptoolsdemo",version = "1.0.0",au

spoj 227

留着 #include <cstdio>#include <cstring>#include <cstdlib>#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int MAXN = 200010;int pos[MAXN];int sum[MAXN << 2];// = MAXN*4int ans[