Time Limit: 10 Sec  Memory Limit: 128 MB

Description

  天猫有一个长方形盒子,长宽分别为A,B。
  这个长方形盒子的内壁全部是镜面。
  天猫在这个盒子的左下方放了一个激光灯。
  这个灯可以照向盒子内的任意角度。
  现在天猫想要打开这个激光灯,但是他想让光线按照如下规则照射:
    1.这束光必须恰好打到盒子边缘反射D次,并且不能碰到任意一个角落(除了出发点以及结束点)。
    2.这束光必须到达盒子右上角,并且结束反射。
  天猫想要知道,所有合法的光线路线的长度平方和是多少。
  作为一个资深OIer,你应该知道输出要对10^9+7取模。

Input

  一行三个数,表示A、B、D。

Output

  一个数,表示路径平方和。

Sample Input

  3 3 2

Sample Output

  180

HINT

  D<=10^9, A,B<=10^6

Solution

  首先,我们注意到若一束光在一个平面反射,相当于镜面一侧的物体对称到镜面另一侧,而光线穿过镜面照到物体成的虚像上。
  所以,我们可以认为:有一个D∗D的网格,需要在这个网格上面找到一点(x,y),要满足x+y−2 = D,这样的话,我们把(0,0)(x,y)连接起来,连线所经过的网格边就是镜面反射时经过的边。也就是说,任意的合法方案整数对(x,y)是一一对应的。
  注意,由于在反射过程中,不能碰到网格的角落,所以应该满足(0,0)(x,y)连线上没有其他整点,也就是gcd(x,y)=1,即gcd(x,D+2)=1

  然后用莫比乌斯反演推一波式子,最后发现要用暴力解决qaq。

  

Code

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<bitset>
using namespace std;
typedef long long s64; const int ONE = ;
const int MOD = 1e9 + ;
const int Niyu = ; s64 A, B, D;
int P[ONE],num;
int vis[ONE];
s64 Ans; int get()
{
int res=,Q=;char c;
while( (c=getchar())< || c> )
if(c=='-')Q=-;
res=c-;
while( (c=getchar())>= && c<= )
res=res*+c-;
return res*Q;
} void Factor(int x)
{
for(int i=; i*i<=x; i++)
if(x % i == )
{
P[++num] = i;
while(x % i == ) x /= i;
}
if(x != ) P[++num] = x;
} int Calc(int n)
{
return (s64)n * (n+) % MOD * (*n+) % MOD * Niyu % MOD;
} void Deal()
{
int d = , N = ;
for(int i=; i<=num; i++)
if(vis[i]) d = (s64)d * P[i] % MOD ,N++;
N = N & ? MOD- : ;
Ans = Ans + (s64)N % MOD * d % MOD * d % MOD * Calc((D+) / d) % MOD,
Ans %= MOD;
} void Dfs(int T)
{
if(T > num) {Deal(); return;}
vis[T] = ; Dfs(T+);
vis[T] = ; Dfs(T+);
} int main()
{
cin>>A>>B>>D;
if(D & ) {printf(""); return ;}
Factor(D + );
Dfs();
printf("%d", (s64)(A * A % MOD + B * B % MOD) % MOD * Ans % MOD);
}

【Foreign】光 [莫比乌斯反演]的更多相关文章

  1. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  2. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  3. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  4. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)

    题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...

  5. 莫比乌斯函数筛法 & 莫比乌斯反演

    模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...

  6. 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2371  Solved: 1143[Submit][Sta ...

  7. POI2007_zap 莫比乌斯反演

    题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...

  8. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  9. CSU 1325 莫比乌斯反演

    题目大意: 一.有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个约数: 二.有多少个有序数对(x,y)满足1<=x<=A ...

随机推荐

  1. Android UI 设计之 TextView EditText 组件属性方法最详细解析

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . TextView 相关类的继承结构 ...

  2. Java 抽象类和Final关键字

    抽象类 用abstract关键字来修饰一个类时,这个类叫抽象类: 用abstract关键字来修饰一个方法时,该方法叫做抽象方法. 含有抽象方法的类必须被定义而为抽象类,抽象类必须被继承,抽象方法必须被 ...

  3. asp.net .net4.0使用异步编程

    "; Action<object> ac = (object obj) => { Debug.WriteLine("睡眠开始:" + DateTime. ...

  4. ACM 第三天

    A - Arpa’s hard exam and Mehrdad’s naive cheat CodeForces - 742A There exists an island called Arpa’ ...

  5. LintCode-366.斐波纳契数

    斐波纳契数列 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是:0, 1, 1 ...

  6. 转 【.NET平台下使用MongoDB入门教程】

    目录 一.了解MongoDB 二.MongoDB特点 三.安装及常用命令 3.1 下载安装 3.2 启动服务器 3.3 常用操作 3.4 其他命令 3.5 做成windows服务 四.批处理程序开启M ...

  7. seaj和requirejs模块化的简单案例

    如今,webpack.gulp等构件工具流行,有人说seajs.requirejs等纯前端的模块化工具已经被淘汰了,我不这么认为,毕竟纯前端领域想要实现模块化就官方来讲,还是有一段路要走的.也因此纯前 ...

  8. AMH面板命令操作大全

    LNMP面板 - AMH 命令使用nginx篇 » SSH Nginx1) 有步骤提示操作: ssh执行命令: amh nginx然后选择对应选项进行操作. 2) 或直接操作: 启动Nginx: am ...

  9. linux 安装 bitnamid-redmine

    Unix 和 Linux 安装 Perl Unix/Linux 系统上 Perl 安装步骤如下: 通过浏览器打开 http://www.perl.org/get.html. 下载适用于 Unix/Li ...

  10. 只有父类的init方法才有创建servletConfig与servletContext的能力

    如果重写了父类的init方法 但又没有显示调用父类的init方法 那么子类无法使用servletContext 因为 子类方法没有创建出 servletConfig