题目链接

题意:
判断一个数nnn,能否有至少两种方法将其表示为
n=a1a2...akn=a_1a_2...a_kn=a1​a2​...ak​(k>=1k>=1k>=1),需要满足对每一个aia_iai​都有:
ai%d==0a_i \% d==0ai​%d==0
and
ai%d2!=0a_i\%d^2 != 0ai​%d2!=0

先上代码:
代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<math.h>
using namespace std;
typedef long long ll;
bool Judge_prime(int x){if(x == 1)return true;for(int i = 2;i <= x/i;i++){if(x%i == 0){return false;}}return true;
}bool Judge_square(int x){int sq = sqrt(x);return sq*sq == x;
}int main(){int t;scanf("%d",&t);while(t--){int n,d;scanf("%d%d",&n,&d);int k = 0;while(n%d == 0)    {k++;n /= d;}int p = n;if(k <= 1){printf("NO\n");}else if(k == 2){if(Judge_prime(p)){printf("NO\n");}else{printf("YES\n");}}else if(k == 3){if(!Judge_prime(p)){printf("YES\n");}else{if(Judge_prime(d)){printf("NO\n");}else{if(Judge_square(d) && (ll)p*p == d){printf("NO\n");}else{printf("YES\n");}}}}else{if(!Judge_prime(p)){printf("YES\n");}else{if(Judge_prime(d)){printf("NO\n");}else{printf("YES\n");}}}}return 0;
}

思路讲解
考虑将nnn形式化分解为:
n=dkpn=d^kpn=dkp,其中,p%d!=0p\%d!=0p%d!=0.
1、当k=0k = 0k=0或k=1k = 1k=1时,显然不行.
2、当k=2k = 2k=2时,即n=d2pn=d^2pn=d2p,显然,将ppp给其中一个ddd是一种合法方案,接下来探索第2种方案。
·当ppp是素数时,不可行。
·当ppp是合数时,设p=xy(x,y>1)p=xy(x,y>1)p=xy(x,y>1) ,则n=(dx)(dy)n=(dx)(dy)n=(dx)(dy)又是一种合法方案,可行。
3、当k=3k=3k=3时,n=dddpn=dddpn=dddp。
·当ppp是合数时,设p=xyp=xyp=xy,则n=d(xd)(yd)n=d(xd)(yd)n=d(xd)(yd)又是一种合法方案。
·当ppp是素数时
··当ddd是素数时:不可行;
··当ddd是合数时:
···当ddd是完全平方数且p∗p=dp*p=dp∗p=d,则不可行;
···否则可以,因为一定可以使得d=xy(x,y>1,x!=y)d=xy(x,y>1,x!=y)d=xy(x,y>1,x!=y),将(xp)(xp)(xp)和(y)(y)(y),或者(yp)(yp)(yp)和(x)(x)(x)分配给剩下两个ddd,且dxpdxpdxp或dypdypdyp不是d2d^2d2的倍数。
4、当k>=4k>=4k>=4时
·如果ppp是素数,则看ddd
··如果ddd是素数,则不行;否则可行。
·如果ppp是合数,则可行。

由于ppp可能为1,这里我们认为在对于ppp和ddd的判断上,1是“素数”。

【CodeForces - 1647D】Madoka and the Best School in Russia(分类讨论,因数分解)相关推荐

  1. codeforces数学1700[CodeForces 1336B[分类讨论+二分]CodeForces - 1301C[组合计数的减法原理]]

    CodeForces 1336B Xenia and Colorful Gems 题目大意:给你nrn_rnr​个xix_ixi​,ngn_gng​个yiy_iyi​,nbn_bnb​个ziz_izi ...

  2. Codeforces Round #408 (Div. 2)-C. Bank Hacking-(三种方法)分类讨论,二分,集合

    补题速度太慢了,这样可不行啊. 代码里都有解释. 看别人代码有三种写法 set,分类,和二分. 这是个是用分类思想写的, #include <bits/stdc++.h> using na ...

  3. Problem - 1190B - Codeforces(分类讨论博弈)

    Problem - 1190B - Codeforces 题目大意:有nnn堆石子,每堆的数目为aia_iai​,现在Alice和Bob两个人可以移走任意一堆不为空的石子中的一颗石子,如果某人移动完石 ...

  4. Vasya and Multisets CodeForces - 1051C 模拟|分类讨论

    题意:把数组分成两个集合 每个集合中元素数量为1的个数相同(此个数可以是0) 分析: 这类问题就是要各种可能情况考虑到     然后分类讨论     完整地正确分类就AC     否则gg 如果数量为 ...

  5. [因子背包] CF1647D Madoka and the Best School in Russia

    由这次的D题从杜老师那学会的比较新奇的背包,我暂且将其命名为因子背包 题意: 一个数xxx被称为好数,当且仅当他被ddd整除而不被d2d^2d2整除. 给定一个数nnn,问是否有超过两种组成方式,让它 ...

  6. CF1647D Madoka and the Best School in Russia(数论,dp,离散化技巧)

    题目链接 题意 给定 1e9 以内的正整数 n,d,问 n 能否由至少两种不同的方式由漂亮数相乘得到: 漂亮数的定义为:能被 d 整除,但不能被 d * d 整除: 思路 n 有一系列数相乘得到,则每 ...

  7. codeforces:C. Another Array Problem【分类讨论 + 找规律】

    目录 题目截图 题目分析 ac code 总结 题目截图 题目分析 做cf题目别老想着套算法模版 找规律才是正道,这就是所谓的「思维」 n = 2很简单 n >= 4: # 肯定有一个最大值,不 ...

  8. Codeforces Round #777 (Div. 2) 简训

    Codeforces Round #777 (Div. 2) 简训 导语 涉及的知识点 题目 A Madoka and Math Dad B Madoka and the Elegant Gift C ...

  9. Codeforces Round #777 (Div. 2) (A-D题解)

    源代码:ACM/OpenjudgeNow/Codeforces at master · abmcar/ACM (github.com) 更好的阅读体验: 折跃坐标 碎碎念:不亏是俄罗斯场+二次元出题人 ...

最新文章

  1. android ui篇
  2. 【Transformer】Augmented Shortcuts for Vision Transformers
  3. Android之bitmap压缩的几种方法的解读
  4. sklearn集成学习概述
  5. 儒枭:我看技术人的成长路径
  6. final 最终 演练 java
  7. 从Python 2切换到Python 3:您需要了解的内容
  8. WCF 4.0 进阶系列 – 第十六章 使用回调合约发布和订阅事件(第二部分)
  9. homebrew安装失败的解决方案
  10. js混淆还原工具_混淆过的js代码如何还原?
  11. 自定义View合辑(2)-饼状图
  12. Spring之控制反转(IOC)
  13. OCR(图片识别)之 百度 VS 谷歌
  14. 2021年塔式起重机司机考试及塔式起重机司机复审考试
  15. LVS负载均衡DR模式安装和配置过程详解
  16. 如何将C盘下的“用户”文件夹改为英文“Users”
  17. ubuntu常用命令大全(转)
  18. 基于用户消费行为的窃电检测(看完论文后的自行总结)
  19. Matlab 基础04 - 冒号Colon operator “:”的使用和复杂应用详析
  20. 批归一化作用_为什么数据要做归一化处理,什么是批归一化?

热门文章

  1. 产品设计 【网站转化率与漏斗模型】
  2. 淘宝商家开通淘金币可以提高商品转化率吗?
  3. 啊哈添柴挑战Java1222. 输出菱形
  4. 计算机毕业设计ssm文学阅读平台
  5. 基于京东micro-app微前端框架的项目实践
  6. 国产游戏面临新一轮洗牌?虚幻4引擎免费开源
  7. C 语言 某人在国外留学,不熟悉当地的天气预报中的华氏温度值,请编程按每隔10°输出0°到300°之间的华氏温度的对照表,方便他对照查找
  8. pytion基础语句之数据类型
  9. matlab计算下列极限,MATLAB微积分计算极限,又快又好
  10. 纸质版表格怎么转换成电子版表格