一、质数
【定义】
质数是指在大于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 ~ 之间的每一个整数去除即可。
原因:除外,n的因数都是成对出现的,一部分小于,而另一部分大于, 因此只需判定在 2~ 之间有无因子即可。
【拓展:6n+/-1素数测试法】
【拓展:φ(n),n以内素数个数,欧拉函数】
二、数组是否相等
思路1:首先比较数组长度;之后排序,循环遍历对比每个位置的元素。
三、随堂测试
已知两个长度分别为m和n的升序链表,若将他们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度。
【定义】
1.算法的时间复杂性分析是一种事前分析估算的方法,它是对算法所消耗资源的一种渐进分析方法。
2.渐进分析是指忽略机器、编程语言和编译器的影响,只关注在输入规模增大时算法运行时间的增长趋势,不等于基本语句的执行次数。
3.的准确含义:存在正常数和,使得对于所有正整数,由代表的数满足条件.
【分析】
-
考虑最坏情况下的执行次数,例如
l1: 1 3 5 7 9 (m=5)
l2: 2 4 6 (n=3)
数字穿插在两个链表中,需要比较m+n-1次
-
根据此执行次数得到对应的时间复杂度
当输入规模被无限放大后,m+n-1的值近似于2倍的m与n之间最大数。
p(m, n) = m + n - 1 2 * max(m, n)
则答案为O(max(m, n)).