切換
舊版
前往
大廳
主題

UVA 406

NEKROS | 2021-05-12 17:07:03 | 巴幣 0 | 人氣 217

建立1-1000的質數表,每次直接找出範圍內的質數放入vector內,再根據vector size,決定從哪裡開始印值
偶數從(prime_list.size() - 2*c)/2開始,奇數從(prime_list.size() - 2*c+1)/2開始
並根據上面的開始為看有沒有小於0決定是否將全部vector印出

Source Code(C++):
#include<iostream>
#include<cmath>
#include<vector>

using namespace std;

bool is_prime(int n){
if(n < 2)
return false;
else if (n == 2)
return true;
for(int count = 2;count <= (int)sqrt(n);count++){
if(n%count == 0)
return false;
}
return true;
}
void prime_table(bool *index,int size){
index[0] = false;
index[1] = true; //given the problem's condition
for(int count = 2;count*count <= size;count++){
if(index[count] == true && is_prime(count) ){
for(int t = count*2;t<=size;t += count)
index[t] = false;
}
}
}

int main(){
int n,c;
bool flag=false;
bool prime_index[1001];
for(int count = 0;count <= 1000;count++)
prime_index[count] = true;
prime_table(prime_index,1000);
/*for(int count = 1;count<=25;count++){
if(prime_index[count])
cout<<count<<' ';
}
cout<<endl;*/
while(cin>>n>>c){
/*if(flag)
file<<endl;*/

vector<int> prime_list;
for(int count = 1;count <= n;count++){
if(prime_index[count])
prime_list.push_back(count);
}
/*for(int count = 0;count<prime_list.size();count++){
cout<<prime_list[count]<<' ';
}*/
cout<<n<<' '<<c<<':';
if(prime_list.size()%2 == 0){
int cur = (prime_list.size() - 2*c)/2;
if(cur <= 0)
cur=0;
for(int index = cur;index < cur+2*c && index<prime_list.size();index++){
cout<<' '<<prime_list[index];
}
}
else{
int cur = (prime_list.size() - 2*c +1)/2;
if(cur <= 0)
cur=0;
for(int index = cur;index < cur+(2*c-1) && index<prime_list.size();index++){
cout<<' '<<prime_list[index];
}
}
cout<<endl<<endl;
/*if(!flag)
file<<endl;
flag = true;*/
}
return 0;
}

創作回應

更多創作