这题确实是好。

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

经过人提示,若(a1,a2,,,,an)与M不互质,则最大公约数中必定包含M中的质数。啊,愰然大悟,这不是显而易见的吗?为什么我想不到?

所以,先求出M包含哪些质数,那么,选出其中一些包含该质数的数组成数列不就好了?这很容易就能想到容斥原理了,因为选出一些数,使它具有性质P1,又选出另一些集合使它具有P2,P3....,最终求至少包含一个性质的集合。

那么,能被1~M中能被P1整除的个数为【M/p1】,以此类推。。。

由容斥原理公式

如此,从M^N中减去就可以了。

#include <iostream>
#include <cstdio>
#include <algorithm>
#define LL __int64
using namespace std; LL prime[50],l;
LL n,m; LL Power(LL m,LL n){
LL ret=1;
for(int i=1;i<=n;i++){
ret=ret*m;
}
return ret;
} void wprime(LL m){
if(m%2==0){
prime[l++]=2;
while(m%2==0)
m/=2;
}
for(LL i=3;i*i<=m;i+=2)
if(m%i==0){
prime[l++]=i;
while(m%i==0)
m/=i;
}
if(m>1)
prime[l++]=m;
} void Nest(LL p, LL re, LL c,LL &res){
if(c==0){
// cout<<re<<endl;
res+=Power(m/re,n);
return ;
}
else{
for(LL i=p;i<l;i++){
Nest(i+1,re*prime[i],c-1,res);
}
}
} LL work(LL c){
LL res=0;
for(LL i=0;i<l;i++){
Nest(i+1,prime[i],c-1,res);
}
return res;
} int main(){
while(scanf("%I64d%I64d",&n,&m)!=EOF){
l=0;
LL al=Power(m,n);
wprime(m);
LL c=1;
for(LL i=1;i<=l;i++){
c*=-1;
LL res=work(i);
al+=(c*res);
}
printf("%I64d\n",al);
}
return 0;
}

POJ 1091的更多相关文章

  1. poj 1091 跳蚤

    跳蚤 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8482   Accepted: 2514 Description Z城 ...

  2. POJ 1091 跳蚤 容斥原理

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

  3. poj 1091 跳骚

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

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

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

  5. ZROI week3

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

  6. POJ题目排序的Java程序

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

  7. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  8. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  9. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

随机推荐

  1. luogu2303 [SDOI2012] Longge的问题

    题目大意:给出n,求sum foreach i(1<=i<=n) (gcd(n, i)). 1~n有太多的数,但是n与m的最大公约数却有很多重复.所以我们枚举最大公约数k,然后让k乘以与n ...

  2. bootstrap搜索样式

    <div class="container"> <div class="input-group"> <input type=&qu ...

  3. element-UI中table表格的@row-click事件和@selection-change耦合了

    <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark&quo ...

  4. python spark 决策树 入门demo

    Refer to the DecisionTree Python docs and DecisionTreeModel Python docs for more details on the API. ...

  5. hdoj--2255--奔小康赚大钱(KM算法模板)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. [Plugin] 文件上传利器SWFUpload使用指南

    SWFUpload是 一个flash和js相结合而成的文件上传插件,其功能非常强大.以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得 到官网上看它的文档,真是太烦了. ...

  7. WPF 资源管理器 WPF Explorer

    最近项目中有个功能是读取外部设备的中的文件,同时由于项目样式限制,因此需要需要简单实现一个Window资源管理器功能. 由于为了接下来工作更好地完善功能,因此先一步做了一个DEMO用于参照和不断的修正 ...

  8. MVC学习日记(三)EntityFramework

    其实学会了第一篇的创建和第二篇的使用以后,基本的mvc操作足够了,至于验证神马的,还不如用Jquery.h5的好看适用,所以接下来, 后续上会讲一些比较实用的. 在之前的文章说到了基础的使用, 那么, ...

  9. PostgreSQL 满足条件时插入数据

    例如:当表中不存在某记录时,才插入这条记录. INSERT INTO 表名(列名1, 列名2) SELECT '值1', '值2' WHERE NOT EXISTS ( SELECT * FROM 表 ...

  10. 01--vim常用快捷键

    Linux中vim编辑器的功能非常强大,许多常用快捷键用起来非常方便,这里将我学vim入门时学的一些常用的快捷键分享给大家一下,希望可以帮助你们.   这个是我将鸟哥书上的进行了一下整理的,希望不要涉 ...