UVA 11014 - Make a Crystal(容斥原理)
UVA 11014 - Make a Crystal
题意:给定一个NxNxN的正方体,求出最多能选几个整数点。使得随意两点PQ不会使PQO共线。
思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O)。那么全部点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n)。n为素数.由于这些素数中包括了合数的情况,而且这些点必定与f(1)除去这些点以外的点共线,所以扣掉.可是扣掉后会扣掉一些反复的。比方f(6)在f(3)和f(2)各被扣了一次。所以还要加回来。利用容斥原理,答案为
f(1) - f(一个质因子) + f(两个质因子)...
所以先预处理一个素数表,枚举n,去分解因子,推断个数,奇数为减偶数为加,这样求出答案
代码:
#include <stdio.h>
#include <string.h> const int N = 200005;
long long n;
long long prime[N];
int pn = 0, vis[N]; long long pow3(long long num) {
return num * num * num - 1;
} int count(long long num) {
int ans = 0;
for (int i = 0; i < pn && prime[i] <= num; i++) {
if (!vis[num]) {ans++; break;}
if (num % prime[i] == 0) {
ans++;
num /= prime[i];
if (num % prime[i] == 0) return -1;
}
}
return ans;
} long long cal(long long num) {
int t = count(num);
if (t == -1) return 0;
if (t&1) return -pow3((n / 2 / num) * 2 + 1);
else return pow3((n / 2 / num) * 2 + 1);
} long long solve() {
long long ans = pow3(n + 1);
for (long long i = 2; i <= n; i++)
ans += cal(i);
return ans;
} int main() {
vis[1] = 1;
for (long long i = 2; i < N; i++) {
if (vis[i]) continue;
prime[pn++] = i;
for (long long j = i * i; j < N; j += i)
vis[j] = 1;
}
int cas = 0;
while (~scanf("%lld", &n) && n) {
printf("Crystal %d: %lld\n", ++cas, solve());
}
return 0;
}
UVA 11014 - Make a Crystal(容斥原理)的更多相关文章
- UVA - 11014 Make a Crystal (莫比乌斯反演)
给定一个n*n*n的立方体(中心点为原点O),选择尽量多的点,使得对于任意两点A,B,B不在线段OA上. 可以发现,原问题可转化为三维坐标下的点(x,y,z)中有多少个点的gcd(x,y,z)=1. ...
- UVA.10325 The Lottery (组合数学 容斥原理 二进制枚举)
UVA.10325 The Lottery (组合数学 容斥原理) 题意分析 首先给出一个数n,然后给出m个数字(m<=15),在[1-n]之间,依次删除给出m个数字的倍数,求最后在[1-n]之 ...
- UVa 11014 (莫比乌斯反演) Make a Crystal
这个题是根据某个二维平面的题改编过来的. 首先把问题转化一下, 就是你站在原点(0, 0, 0)能看到多少格点. 答案分为三个部分: 八个象限里的格点,即 gcd(x, y, z) = 1,且xyz均 ...
- Make a Crystal UVA - 11014 (容斥定理)
题意:给定一个NxNxN的正方体,求出最多能选几个整数点,使得任意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O),那么所 ...
- UVA 12075 - Counting Triangles(容斥原理计数)
题目链接:12075 - Counting Triangles 题意:求n * m矩形内,最多能组成几个三角形 这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对 ...
- UVA 10325 The Lottery( 容斥原理)
The Sports Association of Bangladesh is in great problem with their latest lottery `Jodi laiga Jai'. ...
- UVA 11806 Cheerleaders (组合+容斥原理)
自己写的代码: #include <iostream> #include <stdio.h> #include <string.h> /* 题意:相当于在一个m*n ...
- UVa 11806 - Cheerleaders (组合计数+容斥原理)
<训练指南>p.108 #include <cstdio> #include <cstring> #include <cstdlib> using na ...
- UVa 1393 (容斥原理、GCD) Highways
题意: 给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点. 分析: 首先说紫书上的思路,编程较简单且容易理解.由于对称性,所以只统计“\”这种线型的,最后乘2即是答案. 枚举斜线包围 ...
随机推荐
- n2n搭建手记-1-V1
搭建环境 supernode :阿里云主机一台 aly1(Centos 6.5) edg2node:美团云机器两台 mty1,mty2(Centos 7.0) Step-1 各机器安装subviers ...
- 谜题12:ABC
这个谜题要问的是一个悦耳的问题,下面的程序将打印什么呢? public class ABC{ public static void main(String[] args){ String letter ...
- small test on 5.29 night T1
可以发现题目的重点是在第一个部分,因为只要信心值我们求出来了,那么第二问就是一个简单的最长上升子序列问题了,所以接下来只讲第一问. #include<iostream> #include& ...
- Jetty错误: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@472adad9{r=2,c=false,a=IDLE,uri=}
最近用Jetty跑Spring MVC接收POST请求(POST中数据很大).出现数据无法获取到的问题.如: @RequestMapping(value = "/receive", ...
- [功能]点击ImageView进入页面,时间响应者链实现
app点击一个按钮跳转到另外一个控制器非常常用,但是如果是点击的是UIImageView如何通过模态视图进入另外一个控制器呢?万一这个UIImageView在自定义的cell或者view里面,那该如何 ...
- AE 开发添加新增字段 报错
在为现有要素类新增字段时,有可能会爆出该表正被其他程序或其他人使用,这时我们就会添加失败,解决办法如下: 在新增字段之前,先修改SchemaLock的状态 ISchemaLock pSchemaLoc ...
- java基础之:java注解
一:元注解 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1. ...
- leetcode练习之No.7------ 翻转整数reverse_integer
原文地址:http://www.niu12.com/article/48 git地址:git@github.com:ZQCard/leetcode.git 给定一个 32 位有符号整数,将整数中的数字 ...
- ASP.NET MVC file download sample
ylbtech- ASP.NET MVC:ASP.NET MVC file download sample 功能描述:ASP.NET MVC file download sample 2,Techno ...
- php漏洞挖掘书籍
PHP是一种被广泛使用的脚本语言,尤其适合web开发.具有跨平台,容易学习,功能强大等特点,据统计全世界超过34%的网站有php的应用,包括Yahoo.sina.163.sohu等大型门户网站.而且很 ...