跳蚤
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 8482   Accepted: 2514

Description

Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。而他最终的任务是跳到距离他左边一个单位长度的地方,并捡起位于那里的礼物。 
比如当N=2,M=18时,持有卡片(10, 15, 18)的跳蚤,就可以完成任务:他可以先向左跳10个单位长度,然后再连向左跳3次,每次15个单位长度,最后再向右连跳3次,每次18个单位长度。而持有卡片(12, 15, 18)的跳蚤,则怎么也不可能跳到距他左边一个单位长度的地方。 
当确定N和M后,显然一共有M^N张不同的卡片。现在的问题是,在这所有的卡片中,有多少张可以完成任务。 

Input

两个整数N和M(N <= 15 , M <= 100000000)。

Output

可以完成任务的卡片数。

Sample Input

2 4

Sample Output

12

Hint

这12张卡片分别是: 
(1, 1, 4), (1, 2, 4), (1, 3, 4), (1, 4, 4), (2, 1, 4), (2, 3, 4), 
(3, 1, 4), (3, 2, 4), (3, 3, 4), (3, 4, 4), (4, 1, 4), (4, 3, 4) 

Source

 
题意:略。
思路:每一种方案gcd()=1,如果这能得到,那么这道题就容易了。有点和一道 约瑟夫环变形类似。
题意有16种方案,还有4种方案,分别是,(2,2,4),(2,4,4),(4,2,4),(4,4,4);
他们的gcd()>1。
现在的问题就转化为求n+1个数字,(a1,a2,a3,,,an,M)=1的方案数。
n最多为15,M最大10^8。 我们从反面着手,求出()>1 的数量,用总数m^n减去即可。
m^n太大了,我们用java大数来做。
由于M的存在,求(a1,a2,a3,,,an,M)容易多了。
因为(a1,a2,,,an)=xi  如果xi不是M的因子的话,
那么最后(a1,a2,a3,,,an,M)=1 是为1的。这样的话这样筛选出M的素因子就可以了。容斥一下。
 
 
 import java.math.BigInteger;
import java.util.Scanner; public class Main { static int yz[] = new int[1002];
static int Q[] = new int[2002];
static int len = 0;
static int qlen = 0;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
int n = cin.nextInt();
int m = cin.nextInt();
BigInteger sum = BigInteger.valueOf(m);
sum = sum.pow(n);
/*
* 求m的素因子,并容斥
*/
init(m);
BigInteger tmp = BigInteger.ZERO;
BigInteger sum2 = BigInteger.ZERO;
for(int i=1;i<=qlen;i++)
{
if(Q[i]>0)
{
int k = m/Q[i];
tmp=BigInteger.valueOf(k);
tmp = tmp.pow(n);
sum2=sum2.add(tmp);
}
else if(Q[i]<0)
{
Q[i] = -Q[i];
int k = m/Q[i];
tmp = BigInteger.valueOf(k);
tmp = tmp.pow(n);
tmp = tmp.multiply(BigInteger.valueOf(-1));
sum2=sum2.add(tmp);
}
}
sum2=sum2.multiply(BigInteger.valueOf(-1));
sum=sum.add(sum2);
System.out.println(sum);
}
} private static void init(int n) {
len = 0;
for(int i=2;i<=n/i;i++)
{
if(n%i==0)
{
while(n%i==0)
n=n/i;
yz[++len] = i;
}
}
if(n!=1) yz[++len] = n;
qlen = 0;
Q[0]=-1;
for(int i=1;i<=len;i++)
{
int k = qlen;
for(int j=0;j<=k;j++)
Q[++qlen]=-1*Q[j]*yz[i];
}
}
}
 

poj 1091 跳蚤的更多相关文章

  1. POJ 1091 跳蚤 容斥原理

    分析:其实就是看能否有一组解x1,x2, x3, x4....xn+1,使得sum{xi*ai} = 1,也就是只要有任意一个集合{ai1,ai2,ai3, ...aik|gcd(ai1, ai2, ...

  2. poj 1091 跳骚

    /** 题意: 求对于小于m的n个数, 求x1*a1 + x2*a2+x3*a3........+xn*an = 1 即求 a1,a2,a3,....an 的最大公约数为1 , a1,a2....an ...

  3. POJ 1091

    这题确实是好. 其实是求x1*a1+x2*a2+....M*xn+1=1有解的条件.很明显,就是(a1,a2,...M)=1了.然后,可以想象,直接求有多少种,很难,所以,求出选择哪些数一起会不与M互 ...

  4. ZROI week3

    作业 poj 1091 跳蚤 容斥原理. 考虑能否跳到旁边就是卡牌的\(gcd\)是否是1,可以根据裴蜀定理证明. 考虑正着做十分的麻烦,所以倒着做,也就是用\(M^N - (不合法)\)即可. 不合 ...

  5. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  6. [原]携程预选赛A题-聪明的猴子-GCD+DP

    题目: 聪明的猴子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. POJ 跳蚤

    Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最后一个是M ...

  8. 【poj1091】 跳蚤

    http://poj.org/problem?id=1091 (题目链接) 题意 给出一张卡片,上面有n+1个数,其中最大的数为m,每次可以向前或者向后走卡片上面的步数.问有多少种方案选出n个数组成一 ...

  9. [BZOJ1220][POJ1091][HNOI2002]跳蚤

    [BZOJ1220][POJ1091][HNOI2002]跳蚤 试题描述 Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长. ...

随机推荐

  1. DG配置实验

    1.配置主库环境 2.为备库创建备份文件 3.启动主备库验证配置 4.DG测试 5.DG主备库切换 6.DG主备库第二次切换

  2. remove 清除binlog

    #!/bin/bash DATACFG=/etc/my.cnf DATADIR=`awk /^datadir/ $DATACFG|awk -F"=" '{print $2}'` D ...

  3. php判断字符串A是否含有字符串B

    <?php if (preg_match ("/PHP/", "PHP is the web scripting language of choice." ...

  4. BizTalk动手实验(九)业务规则引擎使用

    1 课程简介 通过本课程熟悉业务规则引擎(BRE)的使用(本环境为Windows 2008 32位操作系统环境 + Visual Studio 2010 + BizTalk 210) 2 准备工作 1 ...

  5. BizTalk动手实验(五)Map开发测试

    1 课程简介 通过本课程熟悉Map的相关开发与测试技术 2 准备工作 熟悉XML.XML Schema.XSLT等相关XML开发技术 新建BizTalk空项目 演示 3.1 基本操作 打开MapDev ...

  6. IOS第12天(2,UINavigationController导航控制器)

    ****HMAppDelegate.m @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application d ...

  7. js循环的总结

    js原生的循环有两种,一般的for循环和for...in循环.还有一种常用jQuery.each()循环. 一. js原生循环 a. for循环,代码如下: var myArray = [1,2,3] ...

  8. Android 6.0 权限管理

    google官方例子: https://github.com/googlesamples/android-RuntimePermissions Android 6.0在我们原有的AndroidMani ...

  9. apple mobile device服务无法启动,错误1053 解决

    我不想安装iTunes,于是下了iTunes64安装包,解压后得到6个文件 安装完 AppleMobileDeviceSupport64.msi 发现服务启动不起来,提示错误1053,网上搜了下发现出 ...

  10. jquery on()方法绑定多个选择器,多个事件

    on(events,[selector],[data],fn) •events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myP ...