玄关
查看原帖
玄关
749831
Luogu_are_DASB楼主2024/5/18 11:51
#include <iostream>
#include <cmath>
#include <cstring>

const int N = 1e7 + 5;
int t;
int a ,b ,c ,d;
bool isprime[N];
int prime[N];
int cnt = 0;

int count(int x ,int a) {
	int sum = 0;
	int x1 = x;
	while(x1) {
		sum += x1;
		x1 /= a;
	}
	return sum;
}

void oula(int n) {
	memset(isprime ,1 ,sizeof isprime);
	isprime[1] = 0;
	for(int i = 2; i <= n; i ++) {
		if(isprime[i]) prime[++ cnt] = i;
		for(int j = 1; j <= cnt and i * prime[j] <= n; j ++) {
			isprime[i * prime[j]] = 0;
			if(i % prime[j] == 0) break;
		}
	}
}

int main() {
	std::cin >> t;
	while(t --) {
		memset(isprime ,0 ,sizeof isprime);
		memset(prime ,0 ,sizeof prime);
		cnt = 0;
		bool flag = 1;
		std::cin >> a >> b >> c >> d;
		oula(std::max(b ,d));
		for(int i = 1; i <= cnt and prime[i] <= d; i ++) {
			int a_b = count(b ,prime[i]) - count(a ,prime[i]);
			int c_d = count(d ,prime[i]) - count(c ,prime[i]);
			if(a_b > c_d) {
				std::cout << "NE" <<  '\n';
				flag  = 0;
				break;
			}
		}
		if(!flag) continue;
		else {
			
			std::cout << "DA" << '\n';
		}
	}
	return 0;
} 

求调

2024/5/18 11:51
加载中...