首页
学习
活动
专区
工具
TVP
发布

xiaoxi666的专栏

一枚后端coder,一起来玩一起学!欢迎关注我的公众号xiaoxi666
专栏成员
100
文章
135159
阅读量
25
订阅数
codeM美团编程大赛初赛B轮D题(考验你的数学思维!)
[编程题] 模 时间限制:1秒 空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c。 输入描述: 第一行一个整数T(T <= 5,000)。 接下来T行,每行四个正整数a,b,c,k(1 ≤ a ≤ 10^18; 2 ≤ k ≤ 10^18; 0 ≤ c < b ≤ 10^18)表示一个询问,所有输入都是十进制的。 输出描述: 对于每组数据输出一行,Yes表示存在,No表示不存在。 输入例子: 2 3 9 5 10 7 3 1 10 输出例子: No Yes
xiaoxi666
2018-10-29
4720
【模板小程序】求小于等于N范围内的质数
关于搜寻一定范围内素数的算法及其复杂度分析                                                       ——曾晓奇     关于素数的算法是信息学竞赛和程序设计竞赛中常考的数论知识,在这里我跟大家讲一下寻找一定范围内素数的几个算法。看了以后相信 对大家一定有帮助。     正如大家都知道的那样,一个数 n 如果是合数,那么它的所有的因子不超过sqrt(n)--n的开方,那么我们可以用这个性质用最直观的方法 来求出小于等于n的所有的素数。     num = 0;     for(i=2; i<=n; i++)     { for(j=2; j<=sqrt(i); j++)          if( j%i==0 ) break;        if( j>sqrt(i) ) prime[num++] = i; //这个prime[]是int型,跟下面讲的不同。     }     这就是最一般的求解n以内素数的算法。复杂度是o(n*sqrt(n)),如果n很小的话,这种算法(其实这是不是算法我都怀疑,没有水平。当然没 接触过程序竞赛之前我也只会这一种求n以内素数的方法。-_-~)不会耗时很多.     但是当n很大的时候,比如n=10000000时,n*sqrt(n)>30000000000,数量级相当大。在一般的机子它不是一秒钟跑不出结果,它是好几分钟都跑不 出结果,这可不是我瞎掰的,想锻炼耐心的同学不妨试一试~。。。。     在程序设计竞赛中就必须要设计出一种更好的算法要求能在几秒钟甚至一秒钟之内找出n以内的所有素数。于是就有了素数筛法。     (我表达得不清楚的话不要骂我,见到我的时候扁我一顿我不说一句话。。。)     素数筛法是这样的:     1.开一个大的bool型数组prime[],大小就是n+1就可以了.先把所有的下标为奇数的标为true,下标为偶数的标为false.     2.然后:       for( i=3; i<=sqrt(n); i+=2 )       {   if(prime[i])            for( j=i+i; j<=n; j+=i ) prime[j]=false;       }     3.最后输出bool数组中的值为true的单元的下标,就是所求的n以内的素数了。     原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质 数的倍数筛掉。      一个简单的筛素数的过程:n=30。     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30     第 1 步过后2 4 ... 28 30这15个单元被标成false,其余为true。     第 2 步开始:      i=3; 由于prime[3]=true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false.      i=4; 由于prime[4]=false,不在继续筛法步骤。      i=5; 由于prime[5]=true, 把prime[10],[15],[20],[25],[30]标为false.      i=6>sqrt(30)算法结束。     第 3 步把prime[]值为true的下标输出来:      for(i=2; i<=30; i++)      if(prime[i]) printf("%d ",i);     结果是 2 3 5 7 11 13 17 19 23 29     这就是最简单的素数筛选法,对于前面提到的10000000内的素数,用这个筛选法可以大大的降低时间复杂度。把一个只见黑屏的算法 优化到立竿见影,一下就得到结果。关于这个算法的时间复杂度,我不会描述,没看到过类似的记载。只知道算法书上如是说:前几年比 较好的算法的复杂度为o(n),空间复杂度为o(n^(1/2)/logn).另外还有时间复杂度为o(n/logn),但空间复杂度为O(n/(lognloglogn))的算法。 我水平有限啦,自己分析不来。最有说服力的就是自己上机试一试。下面给出这两个算法的程序: //最普通的方法: #include<stdio.h> #include<math.h>
xiaoxi666
2018-10-29
1.3K0
【模板小程序】求第n个fibonacci数
1 //fibonacci,find the nth num. 1 1 2 3 5 8... 2 #include <iostream> 3 using namespace std; 4 5 int fib(int n){ 6 if(n==1 || n==2){ 7 return 1; 8 } 9 int prev=1; 10 int result=1; 11 n-=2; 12 while(n--){ 13 result+=prev; 14
xiaoxi666
2018-10-29
4350
【模板小程序】二分法插入排序
Java版源程序来自:http://www.cnblogs.com/PerkinsZhu/p/5674572.html,在此感谢。
xiaoxi666
2018-10-29
6180
Kolakoski序列产生器
1 /* 2 本程序说明: 3 4 Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。 5 他的前几项为1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2, 6 如果相同数字是一组,则每一组的个数为1,2,2,1,1,2,1,2,2,1,2,2,1,1 7 a(n)等于第n组数的长度,因此是自描述的。目前没有递推公式,只能用自描述方式给出 8 本题为Kolakoski序列的变形,可输入任意一组数,构建Kolakoski序
xiaoxi666
2018-10-29
6830
【模板小程序】求M~N范围内的质数个数
1 /* 2 本程序说明: 3 4 [编程题] 求素数 5 时间限制:2秒 6 空间限制:32768K 7 输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数 8 输入描述: 9 两个整数M,N 10 11 12 输出描述: 13 区间内素数的个数 14 15 输入例子1: 16 2 10 17 18 输出例子1: 19 4 20 21 */ 22 //筛法求N以内的素数(普通法+优化
xiaoxi666
2018-10-29
1.5K0
c++ 继承类强制转换时的虚函数表工作原理
本文通过简单例子说明子类之间发生强制转换时虚函数如何调用,旨在对c++继承中的虚函数表的作用机制有更深入的理解。
xiaoxi666
2018-10-29
1.1K0
【左神算法课】二维矩阵的子矩阵最大累加和
题目描述: 思路描述(请结合后面的程序配套理解):  代码: 1 /* 2 本程序说明: 3 4 给定一个矩阵matrix,其中有正有负有0,返回子矩阵的最大累加和 5 例如矩阵matri
xiaoxi666
2018-10-29
1.3K0
【模板小程序】求第n个质数
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int nth_prime(int n) { 6 vector<int> primes(n); 7 primes[0] = 2; 8 int CntOfPrime = 1; 9 for (int i = 3; CntOfPrime < n; ++i) { 10 bool isPrime = true; 11 for (i
xiaoxi666
2018-10-29
8630
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档