题目链接:http://codeforces.com/gym/102822/problem/K
题意:将一个数字n分解成多个互质的数相加,求这些互质的数中最大值和最小值之间的差值,要求这个差值最小

两个数互质的十种情况:
1、两个数都是质数,这两个数互质
2、两个连续的自然数互质。如:8和9、14和15
3、两个连续的奇数互质。如7和9、11和13
4、两个不连续的奇数但只相隔一个奇数的两个数互质。如13和17、15和19
5、两个合数不含相同质因子的两数互质。如:4和9,6和25
6、1和任意一个自然数互质。如:1和8,1和50
7、2、4或8和任意一个奇数互质,如:2和9,4和21
8、3、7或11和任一个不成倍数关系的两数互质。如:3和11,7和25,11和14
9、5和另一个末尾非0非5的数互质,如:5和12,5和18
10、一个质数和一个合数,如质数大于合数,则两数互质;如合数大于质数,但不是质数倍的数,两数也互质。如:89和42,97和27,47和95,61和180

解题思路:
分情况讨论分解情况:
(1)x为奇数,可以将x分解为y-1,y,满足上述情况2,所以差值一定为1
(2)x为偶数
①x/2为偶数时,可以将x拆分为x/2-1,x/2+1,两个连续的奇数
②x/2为奇数时,将x拆分为x/2-2,x/2+2,差值为4,所以此时最大的情况为4
讨论将x分为三份时的情况:
a、x为3的倍数,x%3=0,x/3一定是偶数,可以将x分为x/3-1,x/3,x/3+1的形式(一定互质),差值为2
b、x%3=1时,(x-1)/3一定为一个奇数,让y=(x-1)/3,那么一定可以拼成y-1,y,y+2的形式(需要讨论一下是否互质)
c、x%3=2时,令y=(x-2)/3,且y一定为一个偶数,
可以分成y-2,y,y+2 (三个偶数不会互质),y-1,y+1,y+2(需要讨论一下),其余情况均大于等于4不需要讨论
给定x大于等于5,5的时候有2和3,6的时候没有情况存在,所以6的时候要特判为-1

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
using namespace std;
int t;
int x;
int cas;
int gcd(int x, int y) {return y == 0 ? x:gcd(y, x % y);
}
int main() {cin >> t;while (t--) {cin >> x;cout << "Case #" << ++cas << ": ";if (x == 6) {cout << -1 << endl;continue;}if (x % 2 == 1) {// x为奇数 一定可以分成 y-1,y的形式cout << 1 << endl;}else if (x % 2 == 0) {// x为偶数 应该分解成三个数组合int y = x / 2;if (y % 2 == 0) {cout << 2 << endl;}else {if (x % 3 == 0) {//当x为3的倍数,可以分解为 y-1,y,y+1的形式cout << 2 << endl;}else if (x % 3 == 1) {int sc = 0;int base = (x - 1) / 3;//base-1,base,base+2  base为奇if (gcd(base - 1, base + 2) == 1) {cout << 3 << endl;}elsecout << 4 << endl;}else {int base = (x - 2) / 3;//base一定为偶数  base-1,base+1,base+2if (gcd(base - 1, base + 2) == 1) {cout << 3 << endl;}elsecout << 4 << endl;}}}}return 0;
}

2020CCPC绵阳K.Knowledge is Power(互质数分解)+两数互质规律总结相关推荐

  1. 2020CCPC绵阳

    2020CCPC绵阳 题号 题目名 难度 知识点 A A Colorful Grid B Building Blocks C Code a Trie D Defuse the Bombs 签到 二分 ...

  2. Knowledge is Power Gym - 102822K

    Knowledge is Power Gym - 102822K 题意: 给你一个数n,让你将n分解成一些互质的数,然后这些数的最大值减最小值要求最小,如果不行输出-1,否则输出最大值减最小值的最小情 ...

  3. 分解质因数和判断两数是否互为质数--java

    题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 如果这个质数恰等于n,则说明分解质因数的过程已 ...

  4. 2020CCPC绵阳站 Defuse the Bombs(简单二分)

    2020CCPC绵阳站 Defuse the Bombs(简单二分) 题目 https://pintia.cn/problem-sets/1322796904464203776/problems/13 ...

  5. 两个质数互质是_两个质数一定是互质数_互质数和质数的区别_分解质因数的方法_互为质数和互质数...

    宜城教育资源网www.ychedu.com两个质数一定是互质数_互质数和质数的区别_分解质因数的方法_互为质数和互质数质数,互质数,分解质因数,合数一个数只有1和它本身两个约数,这样的数叫做质数.一个 ...

  6. 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释模板)

    这里有一道经典的例题,可以看一下:点击打开链接 这里的n可能要大于k的,所以不能用欧拉函数去做. 我们首先把k分解质因数,储存到p数组中,num表示质因子的数量. void pr(int k) //求 ...

  7. 关于求1~n中与m互质的数的个数(容器原理+数论分解质因子)

    D. Count GCD 这道题严格来讲不难,a[i]与b[i+1]最大公约数为a[i+1],所以a[i]与b[i+1]必定整除a[i+1],且a[i]/a[i+1]与b[i+1]/a[i+1]互质, ...

  8. java 1099_【LeetCode(Java) - 1099】小于 K 的两数之和

    [LeetCode(Java) - 1099]小于 K 的两数之和 [LeetCode(Java) - 1099]小于 K 的两数之和 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 ...

  9. K Co-prime Permutation 构造,gcd,互质(2020.12.南京)

    题意 : 求构造一个n的排列,满足其中恰好k个元素与下标互质,如果不能则输出-1 思路 : 让前k个与下标偏移1,后面的都与下标相同即可 当且仅当k=0时,无解,输出-1 #include <i ...

最新文章

  1. 完整中英文世界国家级联下拉列表插件【前端版】
  2. mysql同时满足升序和降序_MySQL性能优化(三):索引
  3. The method setClass(Context, Class?) in the type Intent is not applicable for the arguments (GameV
  4. 将完整的XP(非PE)安装到U盘
  5. SVM: 支持向量机中的,那个C
  6. 首页列表显示全部问答,完成问答详情页布局
  7. xpath-语法基本-0223
  8. 【转】C#的内存管理:堆栈、托管堆与指针
  9. github本地库及clone常用命令
  10. MIPS处理器 CPU数据通路
  11. JSCORE01-(达)
  12. java7723魂斗罗2_魂斗罗3代-完全版
  13. 内外兼修:程序员的成长之路+软技能 代码之外的生存指南
  14. matlab 画拉普拉斯变换的零极点
  15. php 读取并显示doc,PHP读取doc,docx,xls,pdf,txt内容
  16. 如何安装windows操作系统?(win10、Window11、win7、win8)
  17. Oracle 报错:ORA-01438: 值大于为此列指定的允许精度
  18. CAD图导入SU中一次成面的方法
  19. JDK下载(jdk1.8下载与安装教程)
  20. PWM转4~20mA电路

热门文章

  1. C# XmlDocument处理XML元素节点
  2. qbo_webi: cherry server 有效url
  3. 搜狗站群之搜狗泛目录实现搜狗大量泛收录
  4. 3G时会有两次 Activate PDP context request消息
  5. 插入图片与背景图片的区别
  6. mysql select limit 1_select * 为什么不好? limit 1 为什么好? --mysql SQL语句优化
  7. Java中Character(类型char)类及类型详解
  8. Nginx反向代理https
  9. 博图用到c语言了吗,浅谈西门子TIA博图软件
  10. 蓝鲸智云统一开发环境搭建指南