博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtCoder Beginner Contest 112 D - Partition(思维 数论)
阅读量:2135 次
发布时间:2019-04-30

本文共 862 字,大约阅读时间需要 2 分钟。

题目链接:

题目大意:

       给出两个数n和m,你需要找到一个长度为n的序列a,使其满足 a1+a2+…+aN = M,找到a1,a2,…,a的gcd的最大可能值

题解:

      我们假设gcd为g,那么一定满足m=gt(t是正整数),又因为a1+a2+…+aN = M,所以a1=gt1, a2=gt2 ,....., an=gtn (t1,t2,...,tn都是正整数),也就是说m=g(t1+t2+t3+...+t4),而(t1+t2+t3+...+t4)至少>=n

        所以我们如果能找到一个数i,使m%i==0 && m/i>=n ,那么x就是一个符合的gcd值,找最大的x即可

 

需要注意的是,这个题的m是1e9

      一开始我写的是for(int i=1;i<=m;++i) ,TLE了。后来想了一下i肯定<=m/n

       就改成 for(int i=1;i<=m/n;++i) ,仍然有一个点过不了,T掉,当n很小的时候的确有这种可能

      于是反正我们是找最大的值,那么就倒过来,从大到小循环 for(int i=m/n;i>=1;--i),找到第一个符合条件的就输出然后break就行了,因为这一定是最大的i

#include
#include
#include
#include
#define ll long long#define INF 1000000007using namespace std;int main(){ //freopen("input.txt","r",stdin); int n,m; cin>>n>>m; int ans=0; for(int i=m/n;i>=1;--i) { if(m%i==0) { int g=m/i; if(g>=n) return cout<
<

 

转载地址:http://pkfgf.baihongyu.com/

你可能感兴趣的文章
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
VS生成DLL文件供第三方调用
查看>>
Android Studio color和font设置
查看>>
Python 格式化打印json数据(展开状态)
查看>>
Centos7 安装curl(openssl)和libxml2
查看>>
Centos7 离线安装RabbitMQ,并配置集群
查看>>
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>