Master of Phi HDU - 6265 (推公式)

推公式:

1. 把 \varphi (n)  再往下拆一级,拆到\mu(d) 一级, 复杂度 O(2^{20}*20) ,但是得用 dfs 实现,要是二进制枚举会重算很多数字

2. 直接 积性函数的 性质, 直接把\varphi (d) 拆掉,最后把所有的相乘

 

第一种

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
#define rep(i,a,b) for(int i=a;i<b;++i)
#define per(i,a,b) for(int i=b-1;i>=a;--i)

LL val[30],num[30];
LL sub[30];
LL val_num[30],inv_val[30];

const LL mod=998244353;

LL pow_mod(LL base,LL n)
{
    LL ans=1;
    while(n) {
        if(n&1)  ans=ans*base%mod;
        base=base*base%mod;
        n>>=1;
    }
    return ans;
}

LL ans;
int m;
void dfs(int pos,int cnt,LL tmp,LL t)
{
    if(pos>=m) {
        tmp=tmp*t%mod;
        if(cnt&1) {
            ans=(ans-tmp+mod);
            if(ans>=mod)ans-=mod;
        } else {
            ans=(ans+tmp);
            if(ans>=mod)ans-=mod;
        }
        return;
    }
    dfs(pos+1,cnt+1,tmp*num[pos]%mod,t*inv_val[pos]%mod);
    dfs(pos+1,cnt,tmp*(num[pos]+1)%mod,t);
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%d",&m);
        rep(i,0,m) {
            scanf("%lld %lld",&val[i],&num[i]);
        }
        ans=0;
        LL up=1<<m;
        LL n=1;
        rep(i,0,m) {
            val_num[i]=pow_mod(val[i],num[i]);
            inv_val[i]=pow_mod(val[i],mod-2);
            n=n*val_num[i]%mod;
        }
        dfs(0,0,1,n);//pos,tmp,t,
        printf("%lld\n",ans);
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要将目标函数 f 进行整理,将表示为 w、t、A、phi1、phi2、mm、M、f、g、k、x0、beta、F0、rho、g 和 S 的函数。然后,使用 MATLAB 的优化工具箱中的函数 fmincon 来求解最大值问题。 下面是使用 MATLAB 的代码示例: ```matlab % 定义目标函数 f = @(x) -(-x(3)^2*x(1)*(x(7)-x(6))*cos(x(1)*x(2)+x(5))-x(4)*cos(x(1)*x(2))+x(7)*x(8)+x(10)*x(11)-2*x(3)*x(10)*sin(x(1)*x(2)+(x(4)+x(5))/2)*sin(x(5)-x(4))-x(12)*x(3)*x(1)*sin(x(1)*x(2)+x(5))-2*x(13)*x(1)*x(3)*cos(x(1)*x(2)+(x(4)+x(5))/2)*sin((x(5)-x(4))/2)-x(14)*x(7)*x(6)*x(15)+x(3)*x(14)*x(7)*x(3)*cos(x(1)*x(2)+x(5))); % 定义约束条件 nonlcon = @(x) deal([], [x(2)-100; x(13)-10000; x(13)]); % 定义初始点 x0 = [1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1]; % 定义变量的上下界 lb = [-Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf; -Inf]; ub = [Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf; Inf]; % 使用 fmincon 函数求解最大值问题 options = optimoptions('fmincon', 'Display', 'iter'); [x_opt, f_opt] = fmincon(f, x0, [], [], [], [], lb, ub, nonlcon, options); % 输出结果 fprintf('Optimal solution:\n'); fprintf('w = %.4f\n', x_opt(1)); fprintf('t = %.4f\n', x_opt(2)); fprintf('A = %.4f\n', x_opt(3)); fprintf('phi1 = %.4f\n', x_opt(4)); fprintf('phi2 = %.4f\n', x_opt(5)); fprintf('mm = %.4f\n', x_opt(6)); fprintf('M = %.4f\n', x_opt(7)); fprintf('f = %.4f\n', x_opt(8)); fprintf('g = %.4f\n', x_opt(9)); fprintf('k = %.4f\n', x_opt(10)); fprintf('x0 = %.4f\n', x_opt(11)); fprintf('beta = %.4f\n', x_opt(12)); fprintf('F0 = %.4f\n', x_opt(13)); fprintf('rho = %.4f\n', x_opt(14)); fprintf('S = %.4f\n', x_opt(15)); fprintf('Maximum value: %.4f\n', -f_opt); ``` 请注意,上述代码中的目标函数 f 和约束条件 nonlcon 需要根据具体的问题进行修改。初始点 x0、变量的上下界 lb 和 ub 也需要根据实际情况进行设置。 希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值