跳蚤
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. thinkphp打印执行的sql

    打印下执行的sql,也就是在执行add或save语句下面写下: echo M()->getlastsql();

  2. Eclipse 官方简体中文语言包下载地址及安装方法

    Eclipse 官方简体中文语言包下载地址及安装方法 打开Eclipse Babel Project 主页: http://www.eclipse.org/babel/downloads.php 根据 ...

  3. .net Sql语句批量插入数据库数据

    #region 使用SqlBulkCopy public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize) ...

  4. SSH相关

    [root@www ~]# vim /etc/ssh/sshd_config# 1. 关于SSH Server 的整体设定,包含使用的port 啦,以及使用的密码演算方式# Port 22# SSH ...

  5. PHP- 数字转汉字

    //数字转汉字 function number2Chinese($num, $m = 1) { switch($m) { case 0: $CNum = array( array('零','壹','贰 ...

  6. play for scala 通过网易smtp发送邮件

    最近用play来做一个小项目,里面用到了发送邮件的功能.这里我将这部分抽出来分享,毕竟目前来看paly于scala方面的中文资料在网上还是毕竟少,希望我的这篇文章能为有需要的人提供一点思路. 下面写下 ...

  7. 欢快的使用Unity JSON吧

    0x01:前言 Unity 5.3加入了UnityUtility类,意味着Unity终于有了自己原生态的JSON库.Unity主要用来游戏开发,JSON做为游戏开发中最受欢迎的配置文件.在官方没有库支 ...

  8. 7.2.12. MySQL如何优化ORDER BY

    在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序. 即使ORDER BY不确切匹配索引,只要WHERE子句中的所有未使用的索引部分和所有额外的ORDER BY 列 ...

  9. 计算机视觉(Computer Version,CV)、模式识别、人工智能

    一.计算机视觉 Divid Marr将计算机视觉系统的开发问题归纳为3个要素: (1)数学理论 考虑数学计算层面的目标及可以引入的合理约束条件. (2)描述和算法 重点解决计算机视觉中的输入输出的数据 ...

  10. 深入Python(4):深拷贝和浅拷贝

    一.前奏:熟悉Python内存管理 在Python中,变量在第一次赋值时自动声明,在创建---也就是赋值的时候,解释器会根据语法和右侧的操作数来决定新对象的类型. 引用计数器:一个内部跟踪变量 引用计 ...