您的位置:首页 > 产品设计 > UI/UE

POJ_2034_anti-prime_sequences

2013-10-14 14:41 211 查看
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <windows.h>
using namespace std;

#define Max 3300
#define Size 3200

bool isPrime[Max];

int n,m,d;

void primeRadiation(){

memset( isPrime, true, sizeof( isPrime ) );

isPrime[1] = false;

for( int i = 4; i <= Size; i += 2 )
isPrime[i] = false;

for( int i = 3; i <= sqrt( Size ); ++i ){
if( isPrime[i] == true ){

const int step = 2 * i;

for( int j = i * i; j <= Size; j += step )
isPrime[j] = false;
}
}
}

bool isAntiPrime( const vector< int >& vec, const int& dd ){

const int end = vec.size()-1;

for( int i = 0; i <= ( end - dd + 1 ); ++i ){

int val = 0;

for( int j = i; j <= ( i + dd - 1 ); ++j )
val += vec[j];

if( isPrime[val] == true )
return false;

}

return true;

}

int main(){

primeRadiation();

while( cin >> n >> m >> d ){

DWORD begin,end;
vector< int > vec;

begin = GetTickCount();

for( int i = n; i <= m; ++i )
vec.push_back( i );

bool b = false;

do{

int dd = d;

while( true ){

b = isAntiPrime( vec, dd );

if( b == false )
break;

dd--;

if( dd == 1 )
break;

}

if( b == true ){

for( int i = 0; i < vec.size(); ++i )
cout << vec[i] << " ";
cout << endl;

break;

}

}while( next_permutation( vec.begin(), vec.end() ) );

end = GetTickCount();

cout << ( end - begin ) << endl;

if( b == false )
cout << "No anti-prime sequence exists." << endl;
}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: