8/26训练日记

这一周要开始看题了,然鹅我还没看完数论,还差点概率和博弈论……难过,又要抽时间补惹嘤嘤嘤。

今天打算看大佬博客里面2015年以及之前的看完hhh.

看见了一个米勒素数测试,没有学过,作用是判断一个数是不是素数,但是这个数太大导致o(√n)都没有办法通过时间限制,所以才有这个算法。这个算法判断素数只能是大概率成功,小概率还是判断不出来的……然后我并不能看懂什么鬼东西,感觉我这个水平也用不到……

梅森素数判定

发现gcd是啥都记不住了……看了个题目标着gcd,还要去查查gcd什么鬼。

好题1:hdoj 5505 GT and numbers

坑点:2^63次方long long也爆,所以只能用unsigned long long。n要想乘上n的因子变成m,最好的办法是n/m是n的因子啦

顺便说一句啊,老师发的那个某个人的博客啊,题目没复制全……我还要搜。。

拓展欧几里得:hdoj 2669 Romantic

用一个公式隐晦的表达出是要考这个,也不算太隐晦,能读出是我学的某个定理。坑点2^31,o(n)就超时,必须用算法。

m不两两互质的中国剩余定理,

例题:pku2891 Strange Way to Express Integers

因为一直记不住,理解也理解不了,还是记下来吧,理解不了死记硬背,我觉得虽然学习方法有点毛病,但是……咱也没办法是吧。

///n个mi不互质
const LL maxn = 1000;
LL a[maxn], m[maxn], n;
LL CRT(LL a[], LL m[], LL n) {
    if (n == 1) {
        if (m[0] > a[0]) return a[0];
        else return -1;
    }
    LL x, y, d;
    for (int i = 1; i < n; i++) {
        if (m[i] <= a[i]) return -1;
        d = ex_gcd(m[0], m[i], x, y);
        if ((a[i] - a[0]) % d != 0) return -1;   //不能整除则无解
        LL t = m[i] / d;
        x = ((a[i] - a[0]) / d * x % t + t) % t; //第0个与第i个模线性方程的特解
        a[0] = x * m[0] + a[0];
        m[0] = m[0] * m[i] / d;
        a[0] = (a[0] % m[0] + m[0]) % m[0];
    }
    return a[0];
}

看的好烦啊,我是真的看不懂那些连一个注释都没有的垃圾代码,烦死了烦死啦!!看不进去!就算看也只是能看懂题解而已,,,没有学下去的信心和希望了。。。该怎么办呢,,不该这样放弃的

再加油看看吧……反正都痛苦了这么久了!!

POJ 1284 Primitive Roots

用了一个原根什么的,仔细一看就是欧拉函数,但是求欧拉函数的方法与我知道的不一样啊!!看的我一愣一愣的,后来找了博客才知道了欧拉函数的第二种求法~

一开始学的第一种,求质因子,再带公式,用的试除??比较好理解,第二种利用了筛法。

const int maxn = 1000+10;
int phi[maxn];
 
void selEuler(int n, int* phi)
{
    for(int i = 2; i <= n; i++)
        phi[i] = 0;
    phi[1] = 1;
    for(int i = 2; i <= n; i++)
    {
        if(!phi[i])
        {
            for(int j = i; j <= n; j += i)
            {
                if(!phi[j]) phi[j] = j;
                phi[j] = phi[j]/i*(i-1);
            }
        }
    }
}

然后啊,就发现了很多别的课本上什么都没有的知识点!!这就是把书读厚的第一步吗!不过我觉得学的确实有点急,我比较想找一些数论的水题,然后一层一层的做下去,加深对知识点的理解的,别人的题终究是别人的题,别人不会的我确实不会,但是别人会的我还真不一定会(我觉得很大概率不会),一直看这种题目,给我一种,基础一点点都没有的感觉。。。也就那点记在脑子里面的模板算是一点点基础吧。

鼠标好难用……

pku2739 Sum of Consecutive Prime Numbers 

符合我水平的水题*1,好就好在这种解题思路很常见,但是我一直记不住。枚举最小的素数,然后一个个加。嗯,不想刷题,就酱紫吧,反正就是打个素数的表一个个枚举呗。

素数的表可以用那个很接近线性的倍增法,也不超时,很棒。

pku3126 prime path

这个题我觉得很棒!!每次换一个数字桨素数a变成素数b,变后的数字也要是素数哦。(有种奇妙的既视感什么鬼!)像这种素数打表顺便bfs的人家就是不会bfs啦讨厌~严格来说这应该是个bfs的题目啦(第一眼看见bfs以为是深搜。。。尴尬)。仔细一想,是个垃圾的水题。。。。就是细节处理有点麻烦,咳咳咳!哭了,再也不录入这种题了啦!

pku2689 prime distance

求区间里面素数距离最大跟最小时的素数,因为好像有很强烈的既视感,就想记录下来~

坑点*在于,打表,l与r的r太大了(=2,147,483,647),打不了那么大的表,电脑之内跑到2^29内的素数,很难办(看题解的时候,博客园里面大佬的博客好漂亮啊!!!爱了!!!)题解里面说,根据小的素数去筛后面的区间~呜,其实并不会,看不懂,不明不白的用了2^31开方。

好像明白了,就是用小的素数而已,大的到后面用小的表示,相当于,总的素数表分成两段来打?

for (long long i = 0; i < pcnt; i++)//小段内的素数个数循环
   for(long long j=((l+primek[i]-1)/primek[i])*primek[i];j<=r;j+=primek[i])
       if(j / primek[i] != 1)//primek[i]是大区间里面这个数的因子
         vis[j - l] = 1;//这个数就不再是素数

这里的找区间的思想是,遍历一遍,找个指针指向左端点,另外的i是右端点,然后一个个比较。

我发现,求素数,最多的时候,就是用那个函数打表,,,一般都是这样的,以后也还是尽量不用判断素数那个东东了吧

今天做了很多质数的题目,还有最大公约数的题目,还有点欧拉函数的,明天看素数的比较难的题吧……今天看的都比较简单咳咳咳(挑的简单的,男的我都看不懂。。。要哭了。

相对而言,欧拉函数的题,最难,明天攻克欧拉函数!!还有素数里面比较难滴~一节一节的学,,符合我个人的学习习惯,主要是吧,,后面的要结合前面的知识,前面搞不懂很难受。查缺补漏也不能这样补啊。。。这都跟个渔网似的了。

今天印象深刻的是这几个晚上看的题目咳咳咳。。还有一个n乘上因子变成m的题目!

我说的好题,应该是相当于一种感觉是我这个阶段,有那么一丝丝可能ac的难度中等及以上的题目吧!(对我这种菜鸡来说)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值