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. 享受release版本发布的好处的同时也应该警惕release可能给你引入一些莫名其妙的大bug

    一般我们发布项目的时候通常都会采用release版本,因为release会在jit层面对我们的il代码进行了优化,比如在迭代和内存操作的性能提升方面,废话不多说, 我先用一个简单的“冒泡排序”体验下r ...

  2. 阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析

    一:问题描述    闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法.在出现crash后如何捕捉并分析异常这两个问题给出自己 ...

  3. [python爬虫]爬取学校教务处成绩

    学校教务处网站 登陆窗口 表单数据 观察登陆窗口和提交的表单数据可知只要将账号.密码.验证码正确赋值提交即可模拟登陆. 账号和密码都有,问题的关键就在验证码上. 右键验证码图片审查观察源码如下图: 刚 ...

  4. 记一次解析XML转对象的笔记

    项目中调用第三方API,返回格式是XML字符串,需要将XML反序列化为对象,格式如下: <?xml version="1.0"?> <Response xmlns ...

  5. java 接口默认修饰符问题

    package test; public interface InterfaceTest { void todo();} /** * 以下是反编译的内容,接口里的方法默认都是public的.abstr ...

  6. Unity无缝循环世界实现

    一年前曾经碰到过已无限世界为题材的游戏开发比赛,虽然对比赛没有兴趣,但是对这个题材倒是有点想法.如何通过unity3d实现无缝的循环世界呢. 有一种想法是动态生成,一块场景一块场景进行动态加载.(做过 ...

  7. iOS 历史浏览网页的定向跳转

    在实际的开发过程中,涉及到交互的问题,原生和H5的网页相互嵌套,直接造成跳转的混乱,混乱就应该指定的历史记录中,就需要网页的一些相关的一些属性问题 需要在webview里面的代理方法中执行相对应的操作 ...

  8. MongoDB基础教程系列--第三篇 MongoDB基本操作(二)

    1.集合操作 1.1.创建集合 MongoDB 用 db.createCollection(name, options) 方法创建集合. 格式 db.createCollection(name, op ...

  9. Entity Framework快速入门--ModelFirst

    Entity Framework带给我们的不仅仅是操作上的方便,而且使用上也很是考虑了用户的友好交互,EF4.0与vs2010的完美融合也是我们选择它的一个理由吧.相比Nhibernate微软这方面做 ...

  10. 一个可能让你记忆力飙升的软件 —— 这是一道填空(keng)题

    本文题目的两个含义: 1.填上次挖的坑,将优化后的软件分享给需要的网友(下载链接附在文末): 还没有看过的网友可以先看看这篇文章: 一个可能让你记忆力飙升的软件 2.这个软件的本质其实就是生成各种填空 ...