说实话,这年头如此这般简单的笔试题还真是不多见了,不过今天被我有幸遇到了! 但是我丝毫也高兴不起来,因为我知道笔试再好,面试那关也难过! 不知道是不是点背的关系,每次面试总是感觉良好,事后却总无回音。 我从自己身上找呀找呀找原因,找到很多。比如,有项目经验,却无大型项目开发经验, 而且项目经验并非多得不得了。

还有就是行业原因,比如,进游戏公司吧,没有游戏开发经验(我说大型的); 比如,进什么CAD开发公司吧,除了懂个lisp啥也拿不出手,最可恨的是面试官给个搜索题愣是让我写DP方程。 想了N久最后实在无奈,说:用搜索加剪枝也可以吧。 他说:搜索复杂度太高,还是DP好。我说,是啊!然后四目相望。 过了半天,他可能突然想起不是过来秀双眼皮的,抱歉的对我说:回去等消息吧! 回来一查那题目发现目前还是归纳到NP难题里面, 哎!只恨大学教科书的更新速度跟不上企业的发展啊,更加感叹,要是我智商超200该多好! 可是,智商200我就该去进个科学院啥的啦!哈哈!

面试反正是一塌糊涂了,其实很多公司的面试官还是蛮好的,也不刁难你, 只需你把自己会的都展现给他如果他觉得合适就应该会录用。 可惜的是目前还没有几个面试官认为我合适的。IT行业跨度太大,从医疗到殡葬,真是无奇不有。 我觉得,如果计算机足够简单,直接让医生空闲时间开发医疗软件好了,他们肯定最能理解需求; 其余计算机科班毕业的只需研究如何将编程变得简单即可。 可惜的是,连我都觉得这种想法够荒诞,可操作性实在不大。

不小心跑题了!囧!

有个判断一个数是否是素数的算法,复杂度为n的根次方,用该算法实现上题真是浑然天成, 不过也毫无效率。注意到10000并不是很大,开个数组存储哪些是质数好像并不是不可接受的, 就10K,不过早期的程序员肯定心疼得要死,但是,计算机内存就像人民币一样,贬值得厉害。 现在的程序员随便开个10M连续空间都不带犹豫的!

现在数组也开好了,只等着判断哪些是素数,哪些不是了。代码如下:

#define N 10005
bool isprimer[N];

void get_primer()
{
    int i = 0, j = 0;
    for (i = 0; i < N; ++i)
    {
        isprimer[i] = true;
    }
    isprimer[0] = false;
    isprimer[1] = false;
    for (i = 2; i < N; ++i)
    {
        if (isprimer[i])
        {
            for (j = 2; i * j < N; ++j)
            {
                isprimer[i * j] = false;
            }
        }
    }
}

注意到get_primer函数的第一层for循环中加了个质数判断,不加这判断也没关系, 但会进行很多没必要的计算,划不来,你说是不?为什么加判断跟不加判断得到的结果一样呢? 因为一个合数总能分解成一个质数和另外一个整数的积,至于这意味着什么,不言自明!

主程序就不写了!


本文作者ruleless, 欢迎评论、交流。
转载请务必标注出处: 分享一道关于素数的笔试题


«Previous:   网络流

»Next:         红黑树