文章目录

  • codeforces数论专题总结(1300~1800)
    • 1444A Division (1500)
    • 1462D Add to Neighbour and Remove(1400)
    • 1423K Lonely Numbers(1600)
    • 1407B Big Vova(1300)
    • 1409C Yet Another Array Restoration(1200)

codeforces数论专题总结(1300~1800)

1444A Division (1500)

题意:输入两个数p,q. 求最大的数x,满足以下条件:

  • p%x==0
  • x%q!=0

一共两种情况:

  1. p%q!=0 答案就是p
  2. p%q==0,那么对q进行质因子分解得:p = $ p_{1}^{a1} p_{2} ^ {a2}…* p_{n} ^{an} $ 因为x和q都是p得因子,那么x质因子分解以后和q的分解一定不相同,要么质因子个数不同,要么某个质因子的数量不同;所以枚举q的每个质因子的个数,让q不断的去除以某个质因子,直到得到满足条件的x,所有情况取最大值;
#include <bits/stdc++.h>
using namespace std;
#define sf(a) scanf("%d",&a)
#define sff(a,b) scanf("%d %d",&a,&b)
#define sfff(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define pf(a) printf("%d\n",a)
#define pff(a,b) printf("%d %d\n",a,b)
#define PII pair<pair<int,int>,int>
typedef long long ll;
const int N=5e4+7,INF=0x3f3f3f3f;
vector<int> v;
int main()
{int t;sf(t);while(t--){ll a,b;cin >>a>>b;v.clear();if(a>=b){if(a%b!=0) cout <<a<<endl;else{ll ans=0,x=b;for(int i=2;i*i<=b;i++){if(b%i==0){while(b%i==0) b/=i;v.push_back(i);}}if(b>1) v.push_back(b);for(int i=0;i<v.size();i++){int j=v[i];ll temp=a;while(temp%j==0){temp/=j;if(temp%x!=0&&a%temp==0){ans=max(ans,temp);break;}}}cout <<ans<<endl;}}else cout <<a<<endl;}}

1462D Add to Neighbour and Remove(1400)

题意:给出一个数组,每次可以合并任意两个数,问至少多少次合并操作后可以使数组中的数全都相同;
思路:因为每次只能合并相邻的,所以合并是一段一段的;假设合并后数组长度为x,那么数组中的每个数都是sum/x,所以每一段合并后的和都应该是sum/x;枚举数组合并后的长度(1~n)取最大值(如果从n往1枚举,那么第一次得出的结果就是最优解)

#include <bits/stdc++.h>
using namespace std;
#define sf(a) scanf("%lld",&a)
#define sff(a,b) scanf("%d %d",&a,&b)
#define sfff(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define pf(a) printf("%d\n",a)
#define pff(a,b) printf("%d %d\n",a,b)
#define PII pair<pair<int,int>,int>
typedef long long ll;
const int N=1e6,INF=0x3f3f3f3f;
ll a[N],sum;
int main()
{int t;cin >>t;while(t--){int n;cin >>n;sum=0;for(int i=1;i<=n;i++){cin >>a[i];sum+=a[i];}ll ans=n;for(int i=n;i>=1;i--){if(sum%i==0){ll res=sum/i,x=0,y=0;
//              cout <<"%%"<<res<<endl;for(int j=1;j<=n;j++){if(y==-1) break; x+=a[j];
//                  cout <<x<<endl;if(x==res) y=1,x=0;else if(x>res) y=-1;}if(x<res&&x!=0) y=-1;if(y>0) {ans=n-i;break;}}}cout <<ans<<endl;}
}

1423K Lonely Numbers(1600)

题意:当一个数满足下面条件时是孤独的:没有任何一个数和他满足下列关系:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXScN9PJ-1608465174526)(./1608212464790.png)]就是不能组成三角形,则这个数是孤独的;问1-n有多少个数是孤独的
思路:分奇偶讨论:

  • 偶数:假设两个相邻的偶数x,y;他们的gcd一定是2,又因为x/gcd(x,y) , y/gcd(x,y)之间相差1,所以三者肯定能构成三角形
  • 奇数:奇数分两种情况:合数,质数;对于合奇数一定符合情况,对于质数,假设质数为x,那么只有另一个数大于等于 x 2 x^2 x2 时才满足条件,所以只需要找出来 n ↔ n \sqrt{n}\leftrightarrow n n ​↔n之间的质数即可
#include <bits/stdc++.h>
using namespace std;
#define sf(a) scanf("%d",&a)
#define sff(a,b) scanf("%d %d",&a,&b)
#define sfff(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define pf(a) printf("%d\n",a)
#define pff(a,b) printf("%d %d\n",a,b)
const int N=2e6+7;
int primes[N], cnt;
bool st[N]; void get_primes(int n)
{for (int i = 2; i <= n; i ++ ){if (!st[i]) primes[cnt ++ ] = i;for (int j = 0; primes[j] <= n / i; j ++ ){st[primes[j] * i] = true;if (i % primes[j] == 0) break;}}
}
int main()
{//ios::sync_with_stdio(false);get_primes(1e6);int t;sf(t);while(t--){int n;sf(n);if(n==1){puts("1");continue;}int ans=1;int res=sqrt(n);int l=upper_bound(primes,primes+cnt,res)-primes;int r=upper_bound(primes,primes+cnt,n)-primes;if(l==0&&primes[0]>res) ans+=r-l;else l--,ans+=(r-l-1);pf(ans);}
}

1407B Big Vova(1300)

题意:给出一个数组a,要求用数组中所有的数字构造出一个数组b,然后数组c的定义是[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yBZLCcND-1608465174529)(./1608367631741.png)]
要求构造数组b,使得c数组最大
思路:暴力,每次遍历当前没用过的数,找到使得gcd最大的数字并且保存和标记

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e3+2;
int a[N],b[N],st[N];
bool cmp(int x,int y)
{return x>y;
}
int main()
{int t;cin >>t;while(t--){memset(st,0,sizeof st);int n;cin >>n;for(int i=0;i<n;i++) cin >>a[i];sort(a,a+n,cmp);int x,y,cnt=0;int gcd=a[0];//cout <<gcd<<endl;b[cnt++]=a[0];st[0]=1;while(cnt<n){int temp=-1;for(int j=0;j<n;j++){if(st[j]) continue;int res=__gcd(gcd,a[j]);//cout <<res<<" ##"<<endl;if(res>temp) y=j,temp=res;}
//          cout <<temp<<endl;
//          cout <<"y"<<" "<<y<<endl;b[cnt++]=a[y];st[y]=1;gcd=__gcd(gcd,a[y]);}for(int i=0;i<cnt;i++) cout <<b[i]<<" ";cout <<endl;}
}

1409C Yet Another Array Restoration(1200)

断更…(不完美的退役)

codeforces数论专题总结相关推荐

  1. 数学/数论专题-学习笔记:狄利克雷卷积

    数学/数论专题-学习笔记:狄利克雷卷积 1. 前言 2. 一些基础函数 3. 积性函数 4. 狄利克雷卷积 5. 总结 6. 参考资料 1. 前言 狄利克雷卷积,是学习与继续探究 μ\muμ 函数和 ...

  2. ACM数论专题3——素数(质数)

    ACM数论专题3--素数 素数是什么 蛮力算法求素数 蛮力算法的实现以及分析 时间复杂度 蛮力算法的改进 时间复杂度 **埃筛** 时间复杂度 线筛 线筛原理分析 线筛实现 素数是什么 质数1 (pr ...

  3. 数论专题(一)数论基本概念

    努力努力再努力x 努力努力再努力x 博客园 首页 新随笔 联系 订阅 管理 数论专题(一)数论基本概念 转载自:https://blog.csdn.net/whereisherofrom/articl ...

  4. ( 数论专题 )【 斐波那契通项公式 + 等比数列求和公式 】

    ( 数论专题 )[ 斐波那契通项公式 + 等比数列求和公式 ] 斐波那契通项公式( 证明略 ): 例题: 求当n趋向于无穷大,Sn等于什么,输出最简分数. 分子是斐波那契数列,分母是K的 i 次方, ...

  5. 数学/数论专题:莫比乌斯函数与欧拉函数

    数学/数论专题:莫比乌斯函数与欧拉函数(进阶) 0. 前言 1. 前置知识 2. 正文 3. 总结 4. 参考资料 0. 前言 本篇文章会从狄利克雷卷积的角度,讨论莫比乌斯函数与欧拉函数的相关性质. ...

  6. codeforces 数论分析题

    题目:http://codeforces.com/contest/359/problem/C 题意:给一个素数x和一个长度为n的数列a[],求的分子和分母的最大公约数. 分析:对于分子来说,我们把分子 ...

  7. 刘汝佳训练指南——数论专题知识点总结:

    数论是一个神奇的东西,各种结论都很经典,有些懂,有些自己还不是很懂. 接下来就一个一个的介绍吧. 第一.素数,素数本身就是一个很让人惊奇的数,因为它代表的是唯一,自己就有连个因数,一个是1,一个是自己 ...

  8. 【ACM】kuangbin基础数论专题

    知识补充:裴蜀定理 1.Bi-shoe and Phi-shoe 1.题意 给出一行数,求对应的数的欧拉函数值大于给出的数的数的最小和. 2.思路 我们知道素数表的欧拉函数值递增. 设素数a,b,b是 ...

  9. 正睿集训数论专题【8.9】

    又到了"最简单"的数论了, 好开心啊~(。◕ˇ∀ˇ◕) 目录 简单数论 数论函数/算术函数 定义 内容 积性函数 定义 举例 性质 性质一 性质二 狄利克雷卷积 定义 性质 常用的 ...

最新文章

  1. B00009 C语言分割字符串库函数strtok
  2. Docker Review - docker 容器 常用命令
  3. 微课堂 | 欢迎加入核心交流群,往期微课堂的嘉宾都在这里
  4. DSP入门:中断PIE
  5. What's New In C# 6.0
  6. C#LeetCode刷题之#11-盛最多水的容器(Container With Most Water)
  7. 对象tostring后怎么转成对象_给对象发语音学猫叫后,对象说晚上要弄哭我.........
  8. Fragmen的onAttach方法
  9. 减少文件间的编译依赖
  10. 上海世博会物联网技术应用
  11. 食饵捕食者模matlab,数学建模经典基于MATLAB的三种群食饵_捕食者模型数值解
  12. arduino 智能车组装步骤_Arduino智能小车硬件安装说明
  13. 组件(component)技术介绍
  14. 机房环境监控报警系统
  15. 技术书是怎么写出来的
  16. 工具及方法 - 使用DOS批处理给Windows文件批量改名
  17. 解密阿里云安全女程序员维棠 、牵尘代码诗! 1
  18. python1到100奇数和_python计算1~100的和,1~100奇数的和,1~100偶数的和,一条代码求1~100的和...
  19. 【AHK】在Obsidian中以选定日期生成链接
  20. MySQL无效的月份_ORACLE 插入时间时显示'无效的月份'的问题

热门文章

  1. 网站页面浏览次数代码mysql_php统计网站/html页面浏览访问次数程序
  2. 暖手宝上架亚马逊欧盟站CE认证办理保暖神器便携式暖宝宝
  3. windows server 2019 如何修改远程端口,亲测可用
  4. 阿里云ECS计算型c8i服务器CPU处理器性能测评
  5. HAUTOJ 1070: 小汽车的位置
  6. python中对列表排序,去重
  7. el-table实现单选
  8. socket编程二十二:socket编程实现文件传输功能
  9. github发起PR(pull request)的教程以及常见操作
  10. 盘点语录/台词类文艺风格的文章怎么排版!