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 ...
随机推荐
- Swift中懒加载(lazy initialization)的实现
Swift中是存在和OC一样的懒加载机制的,但是这方面国内的资料比较少,今天把搜索引擎换成了Bing后发现用Bing查英文\最新资料要比百度强上不少. 我们在OC中一般是这样实现懒加载初始化的: 1: ...
- Asp.Net生命周期和Http管道技术
本篇主要介绍一下内容: 1.ASP.NET生命周期 2.Http运行时 3.Http管道技术 a)inetinfo.exe b)asp.net_isapi.dll c)aspnet_wp.exe d) ...
- 用户文件夹在Finder中消失的问题
这个问题最早有人报告说.在升级了10.9.3的机器上.用户文件夹(/Users)会在Finder中消失.可是非常多人没有这个问题.经过多人的重复查证,最后锁定在iTunes 11.2更新上.假设用户打 ...
- 创建 git仓库
首先创建一个文件夹作为git仓库,创建一个test文件夹,并在文件夹下创建一个test.c的文件用以测试: git init git使用git init来初始化一个git仓库,git的很多命令都是在g ...
- Laravel 5系列教程二:路由,视图,控制器工作流程
免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel ...
- appium自动化,失败自动截图
1.创建监听器类TestNGListener,重写onTestFailure方法,里面定义了 监听的driver ,截图文件路径和名称 package utils; import cases.Appi ...
- 解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level
解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level 学习了:https://blog.csdn. ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何让文本框可以输入,文本框可以编辑
选中一个文本框,然后在属性中双击输入配置的OnMouseDown事件(也可以是别的事件,但都是通过这种方法) 在左侧点击写变量,然后输入类型改成VisuDialos.Numpad(数字键盘方式), ...
- .sh文件怎么安装?
实例:sh java_1.8.0.sh示例:sh filename.sh
- hibernate 继承映射关系( SINGLE_TABLE)
三种继承映射关系. 1,SINGLE_TABLE person student teacher 在一个表中,student和teacher继承自person,通过一个Discriminato ...