M*N的方格矩阵,一个人在左下角格子的中心,除他所站位置外,其他格子的中心都有一个敌人,他一次可发射一枚子弹干掉一条直线上的所有敌人,问至少要发射多少子弹才能干掉所有敌人。

Input
输入2个数m, n,中间用空格分隔,对应矩阵的大小。(1 <= m,n <= 5 * 10^6)
Output
输出发射子弹的数量。

首先,我们知道有一个结论,从坐标(0,0)到整点(x,y)连一条线段,经过的整点个数有gcd(x,y)+1
个,包括(0,0)和(x,y)这2个。
对于每一个坐标(x,y),我们需要考虑是不是需要专门去向它打一枪
需要专门向(x,y)打一枪,说明(0,0)到(x,y)之间没有其他点挡着,即这条线段的整点数只有2个,
即gcd(x,y) + 1 = 2,即gcd(x,y) = 1
所以,如果坐标(x,y)满足gcd(x,y) = 1,则对答案贡献为1
则得到公式
ans = Σ0<=i<=n-1Σ0<=j<=m-1[gcd(i,j) = 1]
    = 2 + ∑1<=i<=n-11<=j<=m-1[gcd(i,j) = 1]
令n=n-1,m=m-1,且n<=m,则:
ans = 2 + ∑1<=i<=n1<=j<=m[gcd(i,j) = 1]
令f(d)表示1<=i<=n,1<=j<=m,中gcd(i,j) = d的(i,j)对数
  g(d)表示1<=i<=n,1<=j<=m,中gcd(i,j)为d的倍数的(i,j)对数
则有:
g(d) = (n / d) * (m / d)
g(d) = f(d) + f(2*d) + ... + f(n/d * d)
     = ∑d|kf(k)
则有:
f(d) = ∑d|kmu(k/d) * g(k)
f(1) = ∑1<=k<=nmu(k) * g(k)
ans = 2 + f(1)
所以只需要求f(1)就可以了,可以O(n)求,也可以O(sqrt(n))
特判:
n == 1 && m == 1 ans = 0
  //File Name: nod1180.cpp
//Created Time: 2017年01月02日 星期一 18时23分52秒 #include <bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = + ;
int prime[MAXN / ],mu[MAXN];
bool check[MAXN];
void init(int N){
memset(check,false,sizeof(check));
int tot = ;
mu[] = ;
for(int i=;i<=N;++i){
if(!check[i]){
prime[tot++] = i;
mu[i] = -;
}
for(int j=;j<tot;++j){
if((LL)i * prime[j] > N) break;
check[i * prime[j]] = true;
if(i % prime[j] == ){
mu[i * prime[j]] = ;
break;
}
else
mu[i * prime[j]] = -mu[i];
}
}
for(int i=;i<=N;++i)
mu[i] += mu[i - ];
}
LL solve(int n,int m){
if(n == && m == ) return ;
if(n == || m == ) return ;
--n,--m;
if(n > m) swap(n,m);
init(n);
LL res = ;
for(int i=,x,y,r;i<=n;){
x = n / i;
y = m / i;
r = min(n / x,m / y);
res += 1LL * (mu[r] - mu[i-]) * x * y;
i = r + ;
}
return res;
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
printf("%lld\n",solve(n,m));
return ;
}

 

51nod 1180 方格射击游戏的更多相关文章

  1. 简单的射击游戏HTML+JS实现

    一直想自己写一个游戏玩,时间和精力都不太允许,最近几天刚好有空闲时间,就琢磨了这个小游戏. 刚开始想着计算图片重叠事件,然后让炮弹和飞机消失,傻乎乎写了一天,越整越乱.今天一大早晕过来了,改用数组以后 ...

  2. Skytte:一款令人印象深刻的 HTML5 射击游戏

    Skytte 是一款浏览器里的 2D 射击游戏.使用 Canvas 元素和大量的 JavaScript 代码实现.Skytte 是用我们的开源和现代的前端技术创造的.经典,快节奏的横向滚动射击游戏,探 ...

  3. 一款简单射击游戏IOS源码

    源码描述: 一款基于cocos2d的简单设计游戏,并且也是一款基于cocos2d的简单射击游戏(含苹果IAD广告), 游戏操作很简单,哪个数字大就点击射击哪个.里面有苹果iad广告,功能简单完整,适合 ...

  4. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结

    8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...

  5. 有图有真相,分享一款网页版HTML5飞机射击游戏

    本飞机射击游戏是使用HTML5代码写的,尝试通过统一开发环境(UDE)将游戏托管在MM应用引擎,直接生成了网页版游戏,游戏简单易上手,非常适合用来当做小休闲打发时间. 游戏地址:http://flyg ...

  6. D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建

    说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...

  7. Unity3D--学习太空射击游戏制作(二)

    步骤三:创建主角 游戏的主角是一艘太空飞船,我们将使用一个飞船模型作为游戏的主角,并赋予他一个脚本,控制他的运动,游戏体的组件必须依赖于脚本才能运行. 01:在Project窗口找到Player.fb ...

  8. Unity3D--学习太空射击游戏制作(一)

    近期买了本书在学习一些Unity3D的东西,在了解了Unity3D工具的基本面板后开始学习一个太空射击游戏的开发过程. 首先下载一个关于本游戏的资源文件,(百度云下载地址:http://pan.bai ...

  9. cocos2d-x学习日志(10) --射击游戏(喵星战争)

    转载请标明:转载自[小枫栏目],博文链接:http://blog.csdn.net/rexuefengye/article/details/10553487 一.纵版射击游戏的特点 纵版射击游戏是一种 ...

随机推荐

  1. IOS-当遇到tableView整体上移时的解决方案

    方案一在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView或collectionView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关 ...

  2. pysproto bug修复

    最近,找隔壁组的同学测试了一下我的pysproto,他们提了很多有益的建议,非常感谢. 在测试中,出现了一次诡异的coredump.当数据变大的时候,就有很大的机率遇上double free.在spr ...

  3. 默认.htpl改为.htpl

    创建一个.html 或.htpl 在打开的html页面空白处右击--属性

  4. springmvc学习笔记--ueditor和springmvc的集成

    前言: 在web开发中, 富文本的编辑器真心很重要. 有电商店铺的打理, 新闻稿/博客文章/论坛帖子的编辑等等, 这种所见即所的编辑方式, 大大方便了非技术人员从事互利网相关的工作. 因为手头有个小项 ...

  5. oracle 卸载和安装

    第一步:在“服务”窗口中停止与oracle有关的所有服务 第二步:卸载Oracle软件 “所有程序——oracle 安装目录——oracle 安装产品——Universal Installer” 第三 ...

  6. QT5学习过程的小问题集锦

    *** only available with -std=c++11 or -std=gnu++11 添加以下代码到*.pro文件. CONFIG += c++11 在 Qt creator 中设置 ...

  7. 第四篇T语言实例开发,自动加血

    游戏自动加血 基础知识复习 通过前面的学习了解以下内容: TC软件的基本使用 TC的基础语法 变量与常量 功能的使用 流程语句的使用 线程的基本使用 TC控件的基本使用 热键和按钮的事件功能 控件的数 ...

  8. final评价Ⅱ

    1.飞天小女警: 礼物挑选这个项目相比之前的发布功能更完善了些,但是整体界面还是不太美观,用户界面上呈现出的选项字不够清晰,使用起来不是很方便,但是增加了猜你喜欢的功能,可以根据用户的浏览记录猜测用户 ...

  9. 第一次在linux上登录博客

    这是我第一次在linux操作系统上登录博客,额,虽然是在X-window上面.好吧,是我太激动了. 这意味着我已经步入linux的世界了,虽然中文输入法不太好用,但是我还是写一下我的心情吧. 从去年的 ...

  10. windosw应用提示内存不足

    找到如下注册表分支: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\Windows 在右侧窗口中可以看到名为&quo ...