考題日期:2014/03/25
題號:406
星等:2
語言:C++
題目:
題意:
給予N與C,找出1到N中所有的質數,並將他們排成一列,共有k個。如果k為偶數,輸出中間Cx2個質數,若k為奇數,則輸出中間Cx2-1個質數。
(本題"1"視為質數)
程式:
#include <iostream>
using namespace std;
int main()
{
int prime[1000];
bool key1 = false;
prime[0] = 1;
prime[1] = 2;
int k = 2,N,c;
for( int i = 3; i < 1000 ; i++)
{
for(int j = 2 ; j < i; j++)
{
if(i % j == 0)
break;
if(j == i-1)
{
prime[k] = i;
k++;
break;
}
}
}
while(cin>>N>>c)
{
if(key1)
cout<<endl;
int a[500];
k = 0;
for(int i = 0; prime[i] <= N ;i++)
{
a[i] = prime[i];
k++;
}
cout<<N<<" "<<c<<":";
if(c*2-1 > k)
{
for(int i = 0 ;i < k ; i++)
{
cout<<" "<<a[i];
}
}
else if(k % 2 ==0)
{
for(int i = k/2-c, j = 0; j < c*2 ; i++,j++)
{
cout<<" "<<a[i];
}
}
else
{
for(int i = (k+1)/2-1-c/2, j = 0; j < c*2-1 ; i++,j++)
{
cout<<" "<<a[i];
}
}
key1 = true;
cout<<endl;
}
}
測資: