/*
今天去国内某大型通讯企业面试,不过在最终的薪资上双方没有找到平衡,看来只有BAT这样的才能给出理想的待遇...此次技术面试倒是较为简单,其中编程题是关于素数的,给出一个较为简易的解决代码。程序的思想就不介绍了,一看便知...
Ps: 程序员面试这个谈吐还是很重要啊,码农那么多,如何构建自己的个人价值是个难度极大的活..
修订:
修改了之前程序中的BUG,这个故事充分说明了程序容不下半点马虎
增加了筛选法求素数
*/
#include "string.h"
#include "math.h"
#include <iostream>
bool IsPrime( int data )
{
bool ret = false;
if ( data > 1 )
{
int end = sqrt(data);
ret = true;
for ( int i=2; i<=end; ++i )
{
if ( 0 == (data%i) )
{
ret = false;
break;
}
}
}
return ret;
}
void PrintPrime(int num)
{
if ( num > 1 )
{std::cout << 2 << endl;
}
for ( int i=3; i<=num; i+=2 )
{
if ( IsPrime(i) )
{
std::cout << i;
std::cout << std::endl;
}
}
}
void Test()
{
PrintPrime(50);
}
/*
筛选法求素数
用位数组来标识素数,这里假设定义的char型数组
*/
#define ARRAYSIZE 8
//位数组长度
#define BITARRAYSIZE(size) ( (size+ARRAYSIZE-1)/ARRAYSIZE )
//位数组位置
#define BITARRAYPOS(pos) ( (pos)/ARRAYSIZE )
//位数组偏移
#define BITARRAYOFT(pos) ( (pos)%ARRAYSIZE )
//设置位数组arr的pos位
#define BITARRAYSET(arr, pos) ( arr[BITARRAYPOS(pos)] |= (1<<BITARRAYOFT(pos)) )
//检测位数组arr的pos位
#define BITARRAYTEST(arr, pos) ( arr[BITARRAYPOS(pos)] & (1<<BITARRAYOFT(pos)) )
{
char baArray[BITARRAYSIZE(50)];
memset(baArray, 0, sizeof(baArray));
for ( int i=2; i<50; ++i )
{
if ( !BITARRAYTEST(baArray, i) )
{
printf("%d\n", i);
for ( int j=i; j<50; j+=i )
{
BITARRAYSET(baArray, j);
}
}
}
printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");
Test();
return 0;
}