POJ 1091
这题确实是好。
其实是求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的更多相关文章
- poj 1091 跳蚤
跳蚤 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8482 Accepted: 2514 Description Z城 ...
- POJ 1091 跳蚤 容斥原理
分析:其实就是看能否有一组解x1,x2, x3, x4....xn+1,使得sum{xi*ai} = 1,也就是只要有任意一个集合{ai1,ai2,ai3, ...aik|gcd(ai1, ai2, ...
- poj 1091 跳骚
/** 题意: 求对于小于m的n个数, 求x1*a1 + x2*a2+x3*a3........+xn*an = 1 即求 a1,a2,a3,....an 的最大公约数为1 , a1,a2....an ...
- [原]携程预选赛A题-聪明的猴子-GCD+DP
题目: 聪明的猴子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- ZROI week3
作业 poj 1091 跳蚤 容斥原理. 考虑能否跳到旁边就是卡牌的\(gcd\)是否是1,可以根据裴蜀定理证明. 考虑正着做十分的麻烦,所以倒着做,也就是用\(M^N - (不合法)\)即可. 不合 ...
- POJ题目排序的Java程序
POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
随机推荐
- oc19--继承1
// // Phone.h // day13 #import <Foundation/Foundation.h> // 被继承的这个类我们称之为父类/ 超类 @interface Phon ...
- Dungeon Master hdoj
Dungeon Master Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tot ...
- 名词解释 —— 抄送(cc)、银弹(silver bullet)
抄送(Carbon Copy,carbon copy 本身的含义是复写本,副本),又简称为 CC. 在现代汉语中,含有抄写与送达的双重意思. 在网络术语中,抄送就是将邮件同时发送给收信人以外的人, 用 ...
- java8新特性系列:[1]让你的eclipse支持java8
package com.anhui.jdk8; /** * 针对eclipse是否支持java8小测试 * MainClass * @author zhongzh * */ public class ...
- Netty简单介绍(非原创)
文章大纲 一.Netty基础介绍二.Netty代码实战三.项目源码下载四.参考文章 一.Netty基础介绍 1. 简介 官方定义为:”Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地 ...
- 【转】什么是P问题、NP问题和NPC问题
原文链接:http://www.matrix67.com/blog/archives/105,感谢Matrix67,看完这篇文章终于把这个几个概念弄明白了!! 这或许是众多OIer最大的误区之一. ...
- Scrapy中的核心工作流程以及POST请求
五大核心组件工作流程 post请求发送 递归爬取 五大核心组件工作流程 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, ...
- python字符串中的单双引
python中字符串可以(且仅可以)使用成对的单引号.双引号.三个双引号(文档字符串)包围: 'this is a book' "this is a book" "&qu ...
- CSS浮动相关解决办法
浮动元素引起的问题: 1. 父元素的一级子元素全都为浮动元素的情况下,父元素的高度无法被撑开,影响与父元素同级的元素 2. 与浮动元素同级的非浮动元素(内容)会跟随其后 3. 若非第一个元素浮动,则该 ...
- JUC集合-BlockingQueue
BlockingQueue 阻塞队列,支持两个附加操作. 1,在队列为空时,获取元素的线程会等待对列变为非空. 2,在队列为满时,存储元素的线程会等待对列可用. 使用场景: 生产者往对列里添加元素 消 ...