P8219 [WFOI - 02] I wanna a feasitor(化验器) 题解
P8219 [WFOI - 02] I wanna a feasitor(化验器)题解
题目大意
给出 \(l, r\),求 \(\max{f(x)[l\le x\le r]}\),\(f(x)\)表示不为 \(x\) 的 \(x\) 的最大公约数。
Solution
- \(x\) 为偶数时就是 \(f(x)=x/2\)。
- \(x\) 为奇数时 \(f(x)\) 要么是 \(1\) 要么是 \(x/d\), \(d\) 一定是大于 2 的, \(d\) 是对于 \(x\) 来说最小的不为 1 的因数。
要让一个数的最大公约数最大就要让这个数最大,那么就只需要看 \(r\)。
- 
如果 \(r\) 是奇数,那么 \(r-1\) 就是偶数, 显然\(f(r-1)\) 函数值会大于 \(f(r)\)。 
- 
如果 \(r\) 是偶数,那么 \(r-1\) 就是奇数, 显然\(f(r)\) 函数值会大于 \(f(r-1)\)。 
于是就有 \(O(1)\) 了。
Code:
/*
Writer: ZhengXiangYu
*/
#include <bits/stdc++.h>
using i64 = long long;
int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	
	i64 l, r;
	std::cin >> l >> r;
	if (r % 2 == 0) {
		std::cout << r / 2 << "\n";
	} else {
		std::cout << (r - 1) / 2 << "\n";
	}
	return 0;
}
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号