摘要:
数论题(筛法求救欧拉函数)题意:输入n,[1,50000],定义一个二元组(x,y),满足1<=x,y<=n , 且x和y互质 , 要求输出二元组的个数。注意好像(2,3),(3,2)算作两个答案,所以我们只要求出一组答案再乘以2即可关键是怎么找出这个二元组,其实就是筛法求欧拉函数我们约定x<y且x与y互质,那么我们将y从1枚举到n,对于每个y,找出所有小于它并且与它互质的x的个数,这不就是求y的欧拉函数吗?而y从1到n,不就是求n以内所有数字的欧拉函数吗?所以最后的答案,就是n以内每个数字的欧拉函数值的累加和*2-1,没什么减1,是因为一个特殊的数字1,1的欧拉函数值为1( 阅读全文
摘要:
今天做了一道本原勾股数组的入门题,读了数论概论的对应章节,自己也在纸上证明了一次,现在做个简单记录数论经典问题:构造本原勾股数组(PPT):a^2+b^2=c^2 , 其中a,b,c两两互质勾股数组的个数是无限个,一般的勾股数组并没有太大的研究价值,但是本原勾股数组(PPT)则有,PPT满足a,b,c两两互质,其他的勾股数组都是通过PPT不断翻倍得到的,所以研究本原勾股数组的本质和性质很重要1.证明a和b必定一奇一偶,并可以推导出c一定是奇数 。 证明后我们约定a是奇数,b是偶数,c为奇数,但a和b的大小不能确定2.a^2+b^2=c^2 ---> a^2=c^2-b^2=(c+b)*( 阅读全文
摘要:
数论经典问题:构造本原勾股数组(PPT):a^2+b^2=c^2 , 其中a,b,c两两互质题意:给你一个n,让你找出一些勾股数组,a^2+b^2=c^2 , 需要满足a<b<c<=n 。 对于每个case题目首先需要你输出这些勾股数组中PPT的个数,然后再输出一个数字,这个数字是n-所有勾股数组用掉的数字个数例如:103,4,5 是唯一一组PPT解,所以第一个输出的数字是1而另外的勾股数组包括 6 8 10 。 那么一共用掉的数字有3,4,5,6,7,8,那么没有用到的数字有4个,所以第二个数字输出4————————————————————————————————题意说完了 阅读全文
摘要:
数学题题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1,2,3,4,6,12的最小公倍数,是12和12的最小公倍数………………那么找出一个序列,使他们的和最小,上面的例子中,他们的和分别为13,7,28,24……显然最小和为7这个题目一开始没有头绪,写了一个暴搜程序来找答案,然后一目了然首先假设我们知道了一系列数字a1,a2,a3……an,他们的LCM是n,那么什么时候他们是最优解呢,当他们两两互质的时候为了方便我们以两个数来说明问题。a和b的L 阅读全文
摘要:
生成随机数据一.生成int型数据简单地生成n个随机数据(数字大小在int范围内)#include <cstdio>#include <cstdlib>#include <cmath>int main(){ int n=60; for(int i=1; i<=n; i++) printf("%d ",rand()); printf("\n"); return 0;}每次运行该程序得到的随机数都是一样的,因为种子相同改变种子,每次运行程序可以得到不同的随机数得到种子需要一个函数srand(m); 参数m决定了种子,那 阅读全文