Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理
/**
题目:Irrelevant Elements UVA - 1635
链接:https://vjudge.net/problem/UVA-1635
题意:給定n,m;題意抽象成(a+b)^(n-1)按照二次项分布后每个系数的值按照位置分别为c1,c2,c3...;
如果ci%m==0; 那么输出这个位置。 思路:已知n,计算系数的方法:c(n,m) = (n-m+1)/m*c(n,m-1) ;由于c(n,m-1)%m不一定等于0.所以要先乘。 由于n达到了1e5,所以如果算结果是不可行的。一边乘一边对m(题目的m)取模也是不行的。因为有除法存在,且不一定都有逆元。 所以采用唯一分解定理来处理。 对每一个系数判断在m这个数的所有素因子都可以>=;这样就可以包含它。注意特殊情况,m=1 或者n=1的时候处理方式。 求每一个系数的素因子个数也是可以用c(n,m) = (n-m+1)/m*c(n,m-1)这个公式来递推。 */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
const int e9 = 1e9;
const double eps = 1e-;
int prime[maxn], pz;
int e[];
int p[], z;
int c[];
int a[maxn];
void init()
{
int N = sqrt(e9+0.5);
for(int i = ; i<=N; i++){
if(prime[i]==){
for(int j = i*i; j <= N; j+=i){
prime[j] = ;
}
}
}
pz = ;
for(int i = ; i <= N; i++){
if(prime[i]==){
prime[pz++] = i;
}
}
//cout<<"pz = "<<pz<<endl;
}
void add_factor(int x,int add)
{
for(int i = ; i < z&&x!=; i++){
while(x%p[i]==){
e[i]+=add;
x/=p[i];
}
}
}
bool ok()
{
for(int i = ; i < z; i++){
if(e[i]>) return false;
}
return true;
}
int main()
{
int n, m;
init();
while(scanf("%d%d",&n,&m)==)
{ z = ;
memset(e, , sizeof e);
for(int i = ; i < pz&&prime[i]*prime[i]<=m; i++){
if(m%prime[i]==){
while(m%prime[i]==){
e[z]++;
m /= prime[i];
}
p[z++] = prime[i];
}
}
if(m>){
e[z] = ;
p[z++] = m;
} n = n-;
int cnt = ;
for(int i = ; i <= n; i++){
add_factor(n-i+,-);//n-m+1
add_factor(i,);// /m
if(ok()){
a[cnt++] = i;
}
}
printf("%d\n",cnt);
for(int i = ; i < cnt; i++){
printf("%d%s",a[i]+,i==cnt-?"\n":" ");
}
if(cnt==){///小坑,哪怕结果为0,也要有一个换行。
printf("\n");
}
}
return ;
}
Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理的更多相关文章
- Irrelevant Elements UVA-1635 (二项式定理)
vjudge链接 原题链接 乍一看似乎没什么思路,但是写几个简单的例子之后规律就变得很明显. 比如当 n=5 时,每一步计算后的结果如下: a1 a1+a2 a1+2a2+a3 a1+3a2+3a3+ ...
- hdu4497-GCD and LCM-(欧拉筛+唯一分解定理+组合数)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)
Deciphering Password Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Divisors (求解组合数因子个数)【唯一分解定理】
Divisors 题目链接(点击) Your task in this problem is to determine the number of divisors of Cnk. Just for ...
- 紫书 习题 10-7 UVa 10539(long long + 素数筛)
注意要开long long 如果int * int会炸 那么久改成long long * int #include<cstdio> #include<vector> #incl ...
- LightOj 1236 Pairs Forming LCM (素数筛选&&唯一分解定理)
题目大意: 有一个数n,满足lcm(i,j)==n并且i<=j时,(i,j)有多少种情况? 解题思路: n可以表示为:n=p1^x1*p2^x1.....pk^xk. 假设lcm(a,b) == ...
- UVa 10791 最小公倍数的最小和(唯一分解定理)
https://vjudge.net/problem/UVA-10791 题意: 输入整数n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小. 思路: 首先对n进行质因数分解,举个例子 ...
- UVa 1635 - Irrelevant Elements-[分解质因数]
Young cryptoanalyst Georgie is investigating different schemes of generating random integer numbers ...
- POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]
Irrelevant Elements Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2407 Accepted: 59 ...
随机推荐
- 监控Coherence成员的加入和离开集群事件
对server事件的监控主要是实现MemberListener类,对Cache事件的监控主要通过MapListener 参考代码 package coherencetest; import com.t ...
- adb logcat通过包名过滤(dos命令find后跟变量)
adb命令中似乎没有直接通过报名来过滤的功能,可是能够通过过滤进程的pid来过滤该应用的日志 过滤条件:该app在执行 实现原理: 1.获取该app执行时的pid 2.通过find命令,过滤pid的日 ...
- [Android]一些设计细节
1. 图标 图标分为:Launcher 图标(程序图标),ActionBar 图标(菜单图标),Contextual 图标(嵌入的小图标)以及Notification 图标(通知栏图标).每种图标都有 ...
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:socket.io&聊天实现
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- nginx监听相同端口,根据域名请求不同的server
nginx监听相同端口,根据域名请求不同的server 学习了:https://blog.csdn.net/liaosiqian/article/details/54861270 注意其中用的是rew ...
- 在redhat下使用x11vnc进行桌面共享
1.在redhat上安装x11vnc时.你须要注意下面几个方面: (1)下载x11vnc的源代码包: 网址例如以下所看到的: http://sourceforge.net/projects/libvn ...
- proto3 中的 map 类型
.proto syntax = "proto3"; option optimize_for = SPEED; message TestStruct { map<int32,s ...
- Destroy reall destroy ?!
最近做战斗逻辑的时候发现一个问题 测试脚本mTest: public class mTest : MonoBehaviour { public mTest2 tmp2; void OnGUI() { ...
- Web学习篇之---css基础知识(一)
css基础知识(一) 1.css样式: 载入css样式有下面四种: 1).外部样式 2).内部样式 3).行内样式 4).导入样式 <link href="layout.css&quo ...
- C++中string.find()函数与string::npos
先说说string::npos参数: npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西.取值由实现决定,一般是 ...