質數的定義為:除了1和它本身之外,沒有別的數可以整除它的。(請注意:在本問題中,1被定義為質數)
你的任務是,給你N及C,請你找出1到N中所有的質數,並把他們排成一列(假設共有K個)。如果K是偶數,請輸出中間那C*2個質數。如果K是奇數,則輸出中間那(C*2)-1個質數。
你的任務是,給你N及C,請你找出1到N中所有的質數,並把他們排成一列(假設共有K個)。如果K是偶數,請輸出中間那C*2個質數。如果K是奇數,則輸出中間那(C*2)-1個質數。
輸入說明 :
每組測試資料一列,各含有2個整數N,C。(1 <= N <= 1000, 1<= C <= N)
輸出說明 :
對每組測試資料輸出N C:,然後輸出題目要求的質數。每個數前方有一空格。 如果2*C或(2*C)-1大於等於K,就把他們全部列出(如第3個sample)。每組測試資料後亦請空一列。請參考Sample Output。
範例輸入 :
21 2
18 2
18 18
100 7
範例輸出 :
21 2: 5 7 11 18 2: 3 5 7 11 18
18: 1 2 3 5 7 11 13 17
100 7: 13 17 19 23 29 31 37 41 43 47 53 59 61 67
/**********************************************************************************//* Problem: c033 "Prime Cuts" from ACM 406 *//* Language: C *//* Result: AC (30ms, 364KB) on ZeroJudge *//* Author: diiuuli520 at 2008-08-17 03:09:20 *//**********************************************************************************/#include<stdio.h>int main (){ int N,c; while(scanf("%d%d",&N,&c)!=EOF && N>=1 && N<=1000 && c>=1 && c<=N ) { int a[178]={0},count=5,j,n,k=4; a[0]=1; a[1]=2; a[2]=3; for(j=3;j<=175;j++) { a[j]=count; for(n=1;n<j;n++) { if(count%a[n]==0) { j--; break; } } k=6-k; count+=k; } printf("%d %d",N,c); int K,q,w,e,s,v; printf(":"); for(K=0;a[K]<=N;K++) { } if((2*c<K) || (2*c-1)<K) { if(K%2==1) { e=(K+1)/2; for(s=e-c;s<e+c-1;s++) { printf("% d",a[s]); } } else if(K%2==0) { q=K/2; for(w=q-c;w<q+c;w++) { printf("% d",a[w]); } } } else if((2*c)>=K || (2*c)-1>=K) { for(v=0;v<K;v++) { printf("% d",a[v]); } } printf("\n\n"); } return 0; }
沒有留言:
張貼留言