FZU - 2125 - 简单等式

本文介绍了一道算法题——FZU2125.简单等式,通过优化暴力枚举的方法来求解给定n和m时,满足特定等式的最小正整数x。文章提供了完整的解析过程及代码实现。

FZU 2125.简单等式

Problem Description

现在有一个等式如下:x^2+s(x,m)x-n=0。其中s(x,m)表示把x写成m进制时,每个位数相加的和。现在,在给定n,m的情况下,求出满足等式的最小的正整数x。如果不存在,请输出-1。

Input

有T组测试数据。以下有T(T<=100)行,每行代表一组测试数据。每个测试数据有n(1<=n<=10^18),m(2<=m<=16)。

Output

输出T行,有1个数字,满足等式的最小的正整数x。如果不存在,请输出-1。

Sample Input

4
4 10
110 10
15 2
432 13

Sample Output

-1
10
3
18

Source

福州大学第十届程序设计竞赛


给你n,m,让你根据公式求最小的x,一道暴力枚举题,但如果只是傻傻的暴力铁定超时,这时候要寻找一个跳出条件

根据等式,x是小于根号n的,n的范围是10的18次方,相当于x最大也才10的9次方,这时候关键点来了,跳出判断就根据s(x, m),想一下这个最大能到多少,x取最大10的9次方,m取最大16,手算一下,s(x, m)绝对不会超过90,那么问题就解决了

不过虽然这个问题解决了,我交的时候碰到了更奇葩的一个问题是,交的时候,用GNU C++交wa了,用Visual c++叫就A了,前些天就遇到这个问题了,还不知道为啥,问大神去了。。

刚去问了YL大神,他看了我代码,默默的说了一句,你用__int64代替long long试试,我了个去啊,还真A啦。最后查了一下,这是不同编译器下,long long 和 __int64是有差异的

long long 与 __int64的差异请戳:c/c++下 long long与__int64不同编译环境的比较



#include <stdio.h>
#include <math.h>
#include <string.h>

int s(int n, int m) {
    int sum = 0;
    while(n){
        sum+=n%m;
        n/=m;
    }
    return sum;
}

int main() {
    int t;
    scanf("%d", &t);
    while(t--) {
        long long n;
        int m;
        scanf("%lld %d", &n, &m);
        int ans = -1;
        int x = sqrt(n*1.0);
        while(x){
            if(n%x == 0){
                int b = s(x, m);
                if(n/x-x == b) {
                    ans = x;
                }
            }
            if(n/x-x > 90)
                break;
            x--;
        }
        printf("%d\n", ans);
    }
}
多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab代码实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法结合两阶段鲁棒模型与确定性模型,旨在应对电力系统中多源输入(如可再生能源)的不确定性,提升系统运行的安全性与经济性。文中详细阐述了分布鲁棒优化的建模思路,包括不确定性集合的构建、目标函数的设计以及约束条件的处理,并通过Matlab编程实现算法求解,提供了完整的仿真流程与结果分析。此外,文档还列举了大量相关电力系统优化研究案例,涵盖微电网调度、电动汽车集群并网、需求响应、储能配置等多个方向,展示了其在实际工程中的广泛应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源系统优化工作的工程师。; 使用场景及目标:①用于研究高比例可再生能源接入背景下电力系统的动态最优潮流问题;②支撑科研工作中对分布鲁棒优化模型的复现与改进;③为电力系统调度、规划及运行决策提供理论支持与仿真工具。; 阅读建议:建议读者结合提供的Matlab代码与IEEE118节点系统参数进行实操演练,深入理解分布鲁棒优化的建模逻辑与求解过程,同时可参考文中提及的其他优化案例拓展研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值