《算法C语言实现》————三道题目
1.对于N = 10,100和1000,记录你的运行环境中分别运行一下程序所花费的时间。(用python)
import datetime global a a = 0 def time_1(s): global a for i in range(s): for i in range(s): for i in range(s): a += 1 begin = datetime.datetime.now() time_1(10) end = datetime.datetime.now() print str(end-begin)
改变time_1(s)中 s为 10 100 1000
分别对应的运行时间为 0:00:00.001000 0:00:00.119000 0:01:22.103000
2.用形如c0+c1N+c2N^2+c3N^3的表达式精确地描述练习2.2中程序的运行时间:对于N=10,100和1000,比较该表达式预测的时间与实际执行时间
不会
3.对于N=10^3,10^4,10^5和10^6,利用埃拉拖色尼筛法确定小于N的素数。
埃拉托色尼筛法: 如果自然数i为素数,则设a[i]为1,否则设为0。首先把数组中的所有元素设为1,以表明没有任何数已被证明是非素数。然后,把数组中所对应索引处已证明是非素数(已知素数的倍数)的元素设为0。如果所有更小素数的倍数都已设为0,a[i]仍然为1,则可知它是素数。(话很长)
#include <stdio.h> #define N 1000 //改这里就好了 main() { int i, j, a[N]; for (i = 2; i < N; i++) a[i] = 1; for (i = 2; i < N;i++) if (a[i]) for (j = i; i*j < N; j++) a[i*j] = 0; for (i = 2; i < N;i++) if (a[i]) printf("%4d\n", i); getch(); }