社区讨论

求估分和算时间复杂度

P8255[NOI Online 2022 入门组] 数学游戏参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lo94ktor
此快照首次捕获于
2023/10/28 05:28
2 年前
此快照最后确认于
2023/10/28 05:28
2 年前
查看原帖
RT
也许是
O(Tzx)O(T\sqrt{\frac{z}{x}})
代码如下:
C
#include<bits/stdc++.h>
using namespace std;
unsigned long long gcd(unsigned long long a,unsigned long long b){
    unsigned long long r;
    while(b>0){
        r = a%b;
        a = b;
        b = r;
    }
    return a;
}
bool check(unsigned long long x,unsigned long long y,unsigned long z){
    if(gcd(x,y)*y==z) return true;
    else return false;
}
int main(){
    freopen("math3.in","r",stdin);
    freopen("math.out","w",stdout);
    int t;
    scanf("%d",&t);
    while(t--){
        vector<unsigned long long> vec;
        unsigned long long a,z;
        scanf("%llu %llu",&a,&z);
        z/=a;
        for(unsigned long long i(1);i<=sqrt(z);++i){
            if(z%i==0){
                vec.push_back(i);
                if(i*i != z) vec.push_back(z/i);
            }
        }
        unsigned long long mn = 18446744073709551615ULL;
        bool fl = false;
        for(auto x:vec){
            if(x>mn) continue;
            if(check(a,x,z)){
                mn = mn > x ? x : mn;
                fl = true;
            }
        }
        if(fl) printf("%llu\n",mn);
        else printf("%d\n",-1);
    }
    return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...