CodeForces - 735D Taxes

xiaoxiao2021-02-28  107

CodeForces - 735D Taxes

     题意:一个人交税要交他收入的最大公因数,但是它可以把工资拆分为任意的几部分,交每一部分的最大公因数,但是不能拆分为1      思路:如果工资为素数就交税为1,显然我们需要要把这个数拆为素数尽可能的多,任意一个偶数可以表示为两个素数的和,所以偶数交税为2,然后只剩下不是素数的奇数了,我是这样处理的,从n-2开始(因为不能拆为1),找到离n最近的一个素数,然后递归的处理n-最近的这个素数     #include<iostream> #include<cmath> using namespace std; bool isPrime(long long n) { for(int i=2;i<=sqrt(n);i++) if(n%i==0) return false; return true; } int solve(long long n) { if(isPrime(n)) return 1; else if(n%2==0) return 2; else { for(int i=n-2;i>=2;i--) { if(isPrime(i)) { //cout<<i; return 1+solve(n-i); break; } } } } int main(void) { long long n; cin>>n; int ans=solve(n); cout<<ans<<endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-72300.html

最新回复(0)