9月8日 课堂知识小结

一、质数

【定义】

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

【判断质数】

思路1:判断一个整数n是否为质数,只需将 n 除以 2 ~ n-1 中的每一个整数。若都不能整除,则n为质数。

思路1代码:

while(i < n)
{
    if(n % i == 0)
    {
    	printf("%d 不是质数", n);
    	break;
	}
    i ++ ;
}
if (i == n)
    printf("%d 是质数", n);

优化思路1:不必走完全程,n 只需要被 2 ~ \sqrt{n}之间的每一个整数去除即可。

原因:除\sqrt{n}外,n的因数都是成对出现的,一部分小于\sqrt{n},而另一部分大于\sqrt{n}, 因此只需判定在 2~\sqrt{n} 之间有无因子即可。

【拓展:6n+/-1素数测试法

【拓展:φ(n),n以内素数个数,欧拉函数】

二、数组是否相等

思路1:首先比较数组长度;之后排序,循环遍历对比每个位置的元素。

三、随堂测试

已知两个长度分别为m和n的升序链表,若将他们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度。

【定义】

1.算法的时间复杂性分析是一种事前分析估算的方法,它是对算法所消耗资源的一种渐进分析方法。

2.渐进分析是指忽略机器、编程语言和编译器的影响,只关注输入规模增大时算法运行时间的增长趋势不等于基本语句的执行次数

3.O(f(n))的准确含义:存在正常数Mn_{0},使得对于所有正整数n\geq {n_{0}},由O(f(n))代表的数x_{n}满足条件\left | x_{n} \right |\leq M\left | f(n) \right |.

【分析】

  1. 考虑最坏情况下的执行次数,例如

    l1: 1 3 5 7 9 (m=5)

    l2: 2 4 6 (n=3)

    数字穿插在两个链表中,需要比较m+n-1次

  2. 根据此执行次数得到对应的时间复杂度

    当输入规模被无限放大后,m+n-1的值近似于2倍的m与n之间最大数。

    p(m, n) = m + n - 1 \leq 2 * max(m, n)
    则答案为O(max(m, n)).

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DDD_duck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值