首页 > 其他分享 >Codechef - N Triplets(构造+观察)

Codechef - N Triplets(构造+观察)

时间:2023-08-13 22:44:26浏览次数:63  
标签:约数 25 数字 int 构造 相乘 Triplets Codechef

题目大意

  对于一个正整数N,需要找到三个不同的数字A,B,C,使得三个数当中任意两个数字相乘都是N的约数,另外还要使得A,B,C三个数字乘积是N的整数倍数。最后输出三个数字(如果有多种组合,输出任意一种即可),如果找不到满足条件的则输出-1。

 

思路

  注意到1必然是其中一个约数,另外我们可以注意到素数显然无解(素数只有1和其本身是因子)。对于约数有三个的数字这种情况,比如25,约数有1,5,25,虽然三者相乘是25的倍数,但是5和25相乘得出125,不是25的因数;对于偶数的4亦同理。将这三种情况特殊讨论后,后面的步骤就按照正常思路即可。举个例子,对于数字27,可取1,3,9,对于数字28,可取1,2,14。因此构造方式为,奇数(1,非N本身的约数,非N本身的约数),偶数(1,2,N÷2)。

 

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#pragma GCC optimize(2)
#define int long long 
const int mod = 1e9 + 7;
const int N = 3e5;
int s[N];


bool isprime(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= n / i; ++i) {
        if (n % i == 0) return false;
    }
    return true;
}

vector<int> div(int n) {
    vector<int> v{1, n};
    for (int i = 2; i <= n / i; ++i) {
        if (n % i == 0) {
            v.push_back(i);
            if (n / i != i) v.push_back(n / i);
        }
    }
    return v;
}


void solve() {
    int n;
    cin >> n;
    if (isprime(n)) cout << "-1" << endl;
    else {
        vector<int> v = div(n);
        if (size(v) < 4) {
            cout << "-1" << endl;
            return;
        }
        if (n & 1) {
            cout << "1 " << v[2] << ' ' << v[3] << endl; 
        } else {
            cout << "1 2 " << n / 2 << endl;
        }
    }
}


signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    while (n--) {
        solve();
    }

    return 0;
}

 

题目链接在这里:N Triplets - Problems - CodeChef

标签:约数,25,数字,int,构造,相乘,Triplets,Codechef
From: https://www.cnblogs.com/ChebyshevTST/p/17627440.html

相关文章

  • 【C++ Primer读书笔记】7.1.4 构造函数
    构造函数构造函数的任务是初始化类对象的数据成员被调用的时机,无论何时只要类的对象被创建,就会调用构造函数构造函数的特殊性1.构造函数与类名称相同2.构造函数没有返回值3.构造函数不能被声明为const,因为当我们创建一个const对象时,直到构造函数完成初始化过程,对象才......
  • golang 构造函数的应用
    在Go语言中,没有类似于传统面向对象编程语言中的构造函数的概念。然而,你可以使用初始化函数来达到类似的效果。在Go中,结构体(struct)是一种用于封装一组相关字段的数据类型。你可以为结构体定义一个初始化函数,该函数在创建结构体实例时自动调用,用于设置字段的初始值。这个初始化函数......
  • 6529: 构造完全图 最小生成树
    描述 对于完全图G,若有且仅有一棵最小生成树为T,则称完全图G是树T的扩展出的。给你一棵树T,找出T能扩展出的边权和最小的完全图G。 输入 第一行N表示树T的点数。接下来N-1行:Si,Ti,Di;描述一条边(Si,Ti)权值为Di。保证输入数据构成一棵树。对于20%的数据,N<=10对于50%的......
  • [Unity]为什么不要在Unity中使用构造函数
    MonoBehaviour派生出来的类会作为Unity3D中的Component挂载在GameObject上,而GameObject会在编辑器的多个地方被显示,如场景编辑器内、Prefab选中时等,这些时候都需要调用它们的构造函数来初始化成员变量的默认值,以便在编辑器中显示它们,也就是说,构造函数的调用次数和调用时机是“完全......
  • C++ 构造函数初始化:提高代码可读性和执行效率
    在C++中,构造函数是用来初始化对象数据成员的。一个对象在创建的时候,构造函数会被自动调用,以便为该对象的数据成员赋初值。传统的初始化方式是在构造函数内部对数据成员逐一进行初始化,这种方式虽然可行,但是代码复杂度高且效率低下。本文将介绍如何使用构造函数初始化列表来提高......
  • 构造完全图
    题目描述对于完全图G ,若有且仅有一棵最小生成树T ,则称完全图G 是树T 扩展出的。给你一棵树T ,找出T 能扩展出的边权和最小的完全图G。输入格式第一行正整数N  表示树T 的点数;接下来N-1 行三个整数u,v,w ;描述一条边 (u,v) 权值为w;保证输入数据......
  • 软件测试|什么是Python构造方法,构造方法如何使用?
    构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。什么是构造方法?在面向对象编程中,构造方法是一个特殊的方法,用于在创建对象时初......
  • 前端原型和原型链构造函数的使用
     目录前言导语代码部分 总结代码部分 总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语......
  • 前端原型和原型链构造函数的使用
     目录前言导语代码部分运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语前端原型和原......
  • 前端原型和原型链构造函数的使用
     目录前言导语原型的构造器指向构造函数 原型上添加方法注意的地方构造器指向构造函数本身总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌......