Codechef - N Triplets(构造+观察)
题目大意
对于一个正整数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
Codechef - N Triplets(构造+观察)的更多相关文章
- 从零开始一个http服务器(三)-返回response 构造
从零开始一个http服务器(三) 代码地址 : https://github.com/flamedancer/cserver git checkout step3 运行: gcc request.h ...
- C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]
题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...
- 快速切题CF 158B taxi 构造 && 82A double cola 数学观察 难度:0
实在太冷了今天 taxi :错误原因1 忽略了 1 1 1 1 和 1 2 1 这种情况,直接认为最多两组一车了 2 语句顺序错 double cola: 忘了减去n的序号1,即n-- B. Taxi ...
- Codechef September Challenge 2018 游记
Codechef September Challenge 2018 游记 Magician versus Chef 题目大意: 有一排\(n(n\le10^5)\)个格子,一开始硬币在第\(x\)个格 ...
- CodeChef COUNTARI Arithmetic Progressions(分块 + FFT)
题目 Source http://vjudge.net/problem/142058 Description Given N integers A1, A2, …. AN, Dexter wants ...
- OpenGL观察轴
旋转矩阵可以通过观察向量构造,观察向量可以是3D空间的两个或三个点.如果一个处于P1点的对象面向P2点,则观察向量就是P2-P1,如下图: 首先,前轴向量通过归一化的观察向量简单计算而来. 其次,左轴 ...
- SICP— 第一章 构造过程抽象
SICP Structure And Interpretation Of Computer Programs 中文第2版 分两部分 S 和 I 第一章 构造过程抽象 1,程序设计的基本元素 2,过 ...
- C#构造Http 破解学校教务系统学生账号密码
背景介绍 我们学校的教务系统的是以学生学号作为登陆账号,初始密码是自己的生日. 一点点想法 每次期末查成绩的时候,我都会有一个想法,要是我能跑到系统后台,把自己的成绩修改一下,那该时间多么舒坦的事情啊 ...
- swift学习笔记之-构造过程
//构造过程 import UIKit /* 构造过程(Initialization): 1.构造过程是使用类.结构体或枚举类型的一个实例的准备过程.在新实例可用前必须执行这个过程,具体操作包括设置实 ...
- java中的静态代码块、构造代码块、构造方法
运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...
随机推荐
- 用python SMTP发送简单邮件
python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 它是一组由源地址到目的地址传送邮件得规则,由它来控制信件的中转方式. Pyth ...
- IM1281B电能计量模块_C语言例程
一.前言 毕设采用了艾锐达公司的IM1281B电量计能模块,找了一圈没发现具体的51单片机的例程,现在写个能使用的C语言例程,方便以后的开发者们. 二.事前准备 引脚定义: 引脚 功能说明 V+ 供电 ...
- Java 设计模式实战系列—策略模式
从优惠打折活动说起 电商平台为了增加销量经常搞一些活动,比如 618.双十一,还有一些节假日活动,根据销量的变化又经常更新不同的活动.最开始为了增加销量,全场都六折: // 打六折 public Bi ...
- 【阅读笔记】超分之LANR-NLM算法
论文信息 [Single Image Super-Resolution via Locally Regularized Anchored Neighborhood Regression and Non ...
- hexo博客主题,git上传,报错Template render error的解决方案
报错信息 INFO Start processing FATAL Something's wrong. Maybe you can find the solution here: http://hex ...
- CMU15-445 Project3 Query Execution心得
Project3 Query Execution 心得 一.概述 首先要说:这个 project很有趣很硬核!从这个 project 开始才感觉自己在数据库方面真正成长了! 第一个 project : ...
- SketchUp Pro 2023 下载和安装教程
SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...
- 浮点指令之找main函数
环境 vs2019 编译选项x86(32位) debug版本 float指令练习 //c++源码 #include<stdio.h> int main(int argc,char* arg ...
- quarkus实战之二:应用的创建、构建、部署
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<quarkus实战>系列 ...
- EntityCleanFramework
EF几乎是按照领域的概念诞生,它可以和Clean结合(ECF是我新想出的名字).ECF 是为了统一业务架构开发方式,也可以说成在 微服务架构 中服务的通用开发方式.当有了统一开发方式后,协作将更上一层 ...