poj2739

1. 异或:

不用额外变量就交换两个变量的位置:

a=a^b;

b=b^a;

a=a^b;

另外若令k=a^b作为中间变量,可以在循环中通过a^=k,交替a,b两个值。

2.质数相关

事实:大于5的质数被6除总余1或5.

判断质数

int isPrime(int n)  
{  
int i, s = (int)(sqrt((double)n) + 0.01), step = 4;  
if (n <= 3) return 1;  
if (n % 2 == 0) return 0;  
if (n % 3 == 0) return 0;  
for (i = 5; i <= s; i += step)  
{  
if (n % i == 0)  
break;  
step ^= 6;  
}  
return i > s;  
}  

产生质数数组的方法

void generate_table(){
    prime[0]=2;
    prime[1]=3;
    prime[2]=5;
    p_size=3;
    int v=5;
    int g=2;
    while(v<=n){
        v+=g;
        g^=6;
        if(v%2==0||v%3==0||v%5==0)
            continue;        
        prime[p_size++]=v;        
    }
}

3.此题方法就是找从index开始的一个序列使和为N,试验从index=0到index=N的所有序列是否合适。

4.总觉得此题有某些简便算法。没有想到。


2012/3/14:今天做poj2262用这个方法生成质数发现是错的,只能用于判断,不能用于生成质数

你可能感兴趣的:(poj2739)