首页 > 其他分享 >[COCI2020-2021#4] Vepar

[COCI2020-2021#4] Vepar

时间:2024-09-10 21:15:05浏览次数:11  
标签:COCI2020 frac get int times 2021 define ldots Vepar

[COCI2020-2021#4] Vepar

题意

给定两组正整数 \(a,a+1,\ldots,b\) 和 \(c,c+1,\ldots,d\)。判断 \(c\times(c+1)\times\ldots\times d\) 能否被 \(a\times (a + 1)\times \ldots\times b\) 整除。

思路

将 \(c\times(c+1)\times\ldots\times d\) 转化为 \(\frac{d!}{(c-1)!}\)。

将 \(a\times (a + 1)\times \ldots\times b\) 转化为 \(\frac{b!}{(a-1)!}\)。

题意转化为 \(\frac{d!(a-1)!}{b!(c-1)!}\) 是否为整数。

使用阶乘分解这道题的做法把分子分母分别分解质因数,判断即可。

以下是阶乘分解的做法:

考虑质数 \(x\) 在 \(a!\) 中出现了多少次。

答案为 \(\sum \lfloor \frac{a}{x^k} \rfloor\)。

因为 \(x\) 在所有 \(x\) 的倍数中出现了一次,在 \(x^2\) 的倍数中出现了两次。

而 \(x^2\) 的倍数也是 \(x\) 的倍数,已经统计了一遍,所以只用再统计一遍。

其它同理。

时间复杂度:\(O(\frac{n}{\log n}) \times O(\log_n)=O(n)\)。

代码

#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N = 1e7 + 5;
int pr[N], cnt, id[N];
bool is[N];
void pri() {
	for (int i = 2; i <= 1e7; i ++) {
		if (!is[i]) pr[++ cnt] = i, id[i] = cnt;
		for (int j = 1; j <= cnt && i * pr[j] <= 1e7; j ++) {
			is[i * pr[j]] = 1;
			if (i % pr[j] == 0) break;
		}
	}
} 
void get(int n, int* c, int v) {
	ll k, ans;
	for(int i=1;i<=cnt;i++)
	{
		k=pr[i];
		ans=0;
		while(k<=n) {
			ans+=(n/k);
			k *= pr[i];
		}
		c[i] += ans * v; 
	}
}
int c1[N], c2[N];
void solve() {
	int a, b, c, d;
	cin >> c >> d >> a >> b;
	get(d, c1, 1); get(a - 1, c1, 1);
	get(c - 1, c2, 1); get(b, c2, 1);
	bool ok = 1;
	for (int i = 1; i <= cnt; i ++)
		if (c2[i] < c1[i]) ok = 0;
	if (ok) cout << "DA\n";
	else cout << "NE\n";
	memset(c1, 0, sizeof(c1));
	memset(c2, 0, sizeof(c2));
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	pri();
	int T = 1;
	cin >> T;
	while (T --)
		solve();
	return 0;
}

标签:COCI2020,frac,get,int,times,2021,define,ldots,Vepar
From: https://www.cnblogs.com/maniubi/p/18407223

相关文章

  • [COCI2020-2021#3] Vlak
    [COCI2020-2021#3]Vlak题意Nina和Emilija在玩游戏。Nina先手,两人轮流在纸上写下一个字母。每个玩家写下字母后得到的单词必须是该玩家喜欢的歌曲中某个单词的前缀。不能操作的玩家输,判断最后谁会赢。思路对每个玩家喜欢的歌曲建立字典树。搜索每个玩家的操作,每次在两......
  • [COCI2020-2021#5] Po
    [COCI2020-2021#5]Po题意给出一个序列\(a\),有一个序列\(b\),初始全为\(0\)。可以对序列\(b\)进行如下操作:使一个连续的区间内的所有数加上一个正整数\(x\)。但要求任意两个操作区间要么互不相交,要么一个包含另外一个。求将序列\(b\)变为序列\(a\)的最小操作次数。......
  • [COCI2021-2022#6] Zemljište
    [COCI2021-2022#6]Zemljište题意给出一个矩阵,一个子矩阵的权值为\(|m-a|+|m-b|\),\(m\)为子矩阵数值和,\(a,b\)为给出的数。求该矩阵权值最小的子矩阵。思路枚举子矩阵上界和下界,左右界使用双指针枚举,令\(a<b\)。对于每个左界,不断扩展右界直到子矩阵和大于\(b\),因为再......
  • 「NOI2021 D1T3 庆典」题解
    uoj675加强:\(\sumk\le6\times10^5\)暴力\(u\)在\(s\Rightarrowt\)路径上\(\iff\)正图上\(s\Rightarrowu\)且反图上\(u\Rightarrowt\)时间复杂度\(O((n+m)q)\)正解只关心可达性,不妨SCC缩点成DAG。注意到一个奇怪的条件:对于三座城市\(x,y,z\),若\(x\Right......
  • Mynavi Programming Contest 2021 (AtCoder Beginner Contest 201) A~E 题解
    A-TinyArithmeticSequence题目大意给定序列\(A=(A_1,A_2,A_3)\)。能否将\(A\)重新排列,使得\(A_3-A_2=A_2-A_1\)?\(1\leA_i\le100\)输入格式\(A_1~A_2~A_3\)输出格式如果能将\(A\)重新排列使得\(A_3-A_2=A_2-A_1\),输出Yes;如果不能,输出No。样例\(A\)输出\((5......
  • AISing Programming Contest 2021 (AtCoder Beginner Contest 202) A~E 题解
    A-ThreeDice一个人抛了三个骰子,它们的顶面分别是\(a,b,c\)。求它们的底面之和。这里用的骰子是标准骰子,即两个相对的面之和为\(7\)。\(1\lea,b,c\le6\)输入格式\(a~b~c\)输出格式输出答案。样例\(a\)\(b\)\(c\)答案\(1\)\(4\)\(3\)\(13\)\(5\)\(6......
  • KYOCERA Programming Contest 2021 (AtCoder Beginner Contest 200) A~E 题解
    A-Century题目大意公元\(N\)年在第几个世纪中?一个世纪是由\(100\)个年份组成的一个区间。如,\(1\)世纪为\([1,100]\)年,\(2\)世纪为\([101,200]\)年,……\(1\leN\le3000\)输入格式\(N\)输出格式将答案输出为一个整数。样例\(N\)输出\(2021\)\(21\)\(200......
  • 计算机考研真题知识点——2021(A)
    目录2021(A)一、选择题二、判断题三、简答题四、综合题2021(A)一、选择题1、C语言程序是从程序中的main函数开始执行的。2、 intx=2,y=3,z=4; x<z?y:z //的结果是?34、若说明语句“inta[5],*p=a;”,则对数组元素的正确引用是()A、a[p]B、p[a]C、*(p+2)D、p+......
  • 计算机考研真题知识点——2021(B)
    目录2021(B)一、选择题二、判断题三、简答题四、综合题2021(B)一、选择题1、以下说法正确的是:CA、switch后面括号中放置的可以是值为任意类型的表达式。B、continue和break均可以用在switch语句及循环语句中。C、如果函数的返回类型与返回值类型不一致,以函数的返回类......
  • After Effects 2021软件下载-ae软件安装
    After Effects 2021软件下载-ae软件安装AfterEffects2021软件下载与安装指南AdobeAfterEffects2021是一款强大的视频后期制作软件,广泛应用于电影、电视、广告等领域。它提供了丰富的特效、动画和合成工具,帮助用户创建令人惊叹的视觉效果。本文将详细介绍如何下载和安装After......