Maximal GCD

题目链接:http://codeforces.com/contest/803/problem/C

    ——每天在线,欢迎留言谈论。

题目大意:

给你n,k(1<=n,k<=1e10)。

要你输出k个数,满足以下条件:

①这k个数之和等于n

②严格递增

②输出的 这k个数 的最大公约数q是同样满足①②条件中的最大的!

思路:

一、先找出这个符合条件的最大的q:

①q一定是n的 公约数

②q*(1+2+···+k)<=n 时的q就可以成为共约数(因为输出时 只需要把k增大到m,m满足 1+2+··+(k-1)+m=n/q 就可以)

③在n的公约数中从大到小遍历是否符合条件即可。

↓ ↓ ↓ ↓ 不超时的一种 遍历公约数 的思想!

只需要通过for(long long i=1;i<sqrt(n);i++)来找出最大的那个q

假如2是他的一个约数,那么n/2也是。3是的话n/3也是。所以循环到sqrt(n)即可。最多1e5次循环 不会超T。

二、输出这k个数

q*a1,q*a2,q*a3 ······ q*ak(没有,号,只是好看)

其中的{a1,a2,a3···ak}={1,2,3 ··· (k-2) , (k-1) , ((n/q)- sum)}(sum=1+2+···+(k-1))

PS注意:k好大时 long long 也装不下(1+2+···+k)!(不说太清楚,自己体会,哈哈...)

AC代码:

 #include <iostream>
#include <cmath>
using namespace std;
int main()
{//1<=n,k<=1e10
long long n,k,sqr,cadd,q;//q为最大公约数
cin>>n>>k;
if(k>)
{
cout<<"-1"<<endl;return ;
}
cadd=(+k)*k/;sqr=sqrt(n);q=;
for(long long i=;i<=sqr;i++)
{
if(n%i==)
{
if(i>=cadd)
{q=n/i;break;}
else if(n/i>=cadd)
q=i;
}
}
//cout<<q<<endl;
if(!q)
{
cout<<"-1"<<endl;return ;
}
long long sum=,i;
for(i=;i<k;i++)
{
cout<<i*q<<" ";sum+=i;
}
cout<<q*(n/q-sum)<<endl;
return ;
}

2017-05-04 14:06:58 -> 2017-05-05 12:51:05 -> 2017-05-05 20:45:26

codeforces 803C Maximal GCD(GCD数学)的更多相关文章

  1. Codeforces 803C. Maximal GCD 二分

    C. Maximal GCD time limit per test: 1 second memory limit per test: 256 megabytes input: standard in ...

  2. CodeForces - 803C Maximal GCD 【构造】

    You are given positive integer number n. You should create such strictly increasing sequence of k po ...

  3. Codeforces 803C. Maximal GCD

    题目链接:http://codeforces.com/contest/803/problem/C 中了若干trick之后才过... k个数的严格递增序列最小权值和就是${n*(n+1)/2}$,枚举这 ...

  4. AC日记——Maximal GCD codeforces 803c

    803C - Maximal GCD 思路: 最大的公约数是n的因数: 然后看范围k<=10^10; 单是答案都会超时: 但是,仔细读题会发现,n必须不小于k*(k+1)/2: 所以,当k不小于 ...

  5. CodeForce-803C Maximal GCD(贪心数学)

    Maximal GCD CodeForces - 803C 现在给定一个正整数 n.你需要找到 k 个严格递增的正整数 a1, a2, ..., ak,满足他们的和等于 n 并且他们的最大公因数尽量大 ...

  6. HDU 5726 GCD (2016多校、二分、ST表处理区间GCD、数学)

    题目链接 题意 : 给出一个有 N 个数字的整数数列.给出 Q 个问询.每次问询给出一个区间.用 ( L.R ) 表示.要你统计这个整数数列所有的子区间中有多少个和 GCD( L ~ R ) 相等.输 ...

  7. Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论

    Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论 题意 给你一段数,然后小明去猜某一区间内的gcd,这里不一定是准确值,如果在这个区间内改变 ...

  8. Codeforces 475D CGCDSSQ 区间gcd值

    题目链接 题意 给定一个长度为 \(n\) 的数列 \(a_1,...,a_n\) 与 \(q\) 个询问 \(x_1,...,x_q\),对于每个 \(x_i\) 回答有多少对 \((l,r)\) ...

  9. Codeforces 992 范围内GCD,LCM要求找一对数 衣柜裙子期望

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std ...

随机推荐

  1. Java的Date和Time入门教程

    本文是一篇翻译文章,已取得原作者授权,原文地址是http://tutorials.jenkov.com/java-date-time/index.html Java语言的JDK中关于日期和时间的API ...

  2. mybatis对java自定义注解的使用——入门篇

    最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的mybatis,在其使用过程中,不加思索的用了比较原始的一种持久化方式: 在一个包中写一个DAO的接口,在另一个包里面 ...

  3. FastCGI超过活动超时时间

    线上环境:PHP5.4 and IIS 打开IIS管理器,找到FastCGI,打开后编辑选项 活动超时默认为70(秒) 请求超时默认为90(秒) 可根据项目需求来更改这两项的值

  4. yii2.0使用之缓存

    1.片段缓存(针对于视图中的某部分进行缓存): <?php 设置有效时间 $time=15; 缓存依赖,存入文件.当文件内容发生改变是才会刷新新内容 $dependecy=[ 'class'=& ...

  5. system()、exec()、fork()三个与进程有关的函数的比较

    启动新进程(system函数) system()函数可以启动一个新的进程. int system (const char *string ) 这个函数的效果就相当于执行sh –c string. 一般 ...

  6. Unity 3D Framework Designing(1)—— MVVM 模式的设计和实施(Part 1)

    初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...

  7. Windbg调试中遇到的问题

    1.找不到符号文件 抓取完Dump后,打开WinDbg,Ctrl+D找到刚才抓取的Dump文件,报如下异常: *** ERROR: Symbol file could not be found. De ...

  8. vuejs模板使用方法

    vuejs的模板功能很强大,下面是一些demo <!DOCTYPE html> <html lang="en"> <head> <meta ...

  9. inux的进程-进程的概念和fork创建进程

    一.  什么是进程? 初学者,可能认为程序或者一段代码就是一个进程.其实这样说是很不全面的,进程简单的说就是一个个条件. 1.需要一个代码 2.需要运行这个代码环境和资源 从下面的一段代码,我们来分析 ...

  10. 【Electron】Electron开发入门(四):操作PC端文件系统

    一.调用PC端默认方式打开本地文件 在main.js里 // 打开系统本地文件或者网页链接 const {shell} = require('electron'); // Open a local f ...