1517 - 素数
时间限制 : 1 秒
内存限制 : 32 MB
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
题目输入
输入有多组数据。
每组一行,输入n。
题目输出
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
输入/输出样例
输入格式
70
输出格式
11 31 41 61
C语言解答
#include<stdio.h> int main() { int i,j,a[3000],n,m,flag; m=0; for(i=2;i<=12000;i++) { a[0]=2; flag=1; for(j=0;j<=m;j++) { if(i%a[j]==0) flag=0; } if(flag) { m++; a[m]=i; } } while(scanf("%d",&n)!=EOF) { if(n<=11) printf("-1\n"); if(n>11) { printf("11"); for(i=5;a[i]<n;i++) if(a[i]%10==1)printf(" %d",a[i]); printf("\n"); } } return 0; }
C++解答
#include<stdio.h> #include<math.h> int main() { int n,i,j,flag; while(scanf("%d",&n)!=EOF) { for(flag=0,i=2;i<n;i++) { for(j=2;j<=sqrt(i);j++) if(i%j==0) break; if(j>sqrt(i)&&i%10==1) { printf(flag?" %d":"%d",i); flag=1; } } if(!flag) printf("-1"); puts(""); } return 0; }
Python解答
import sys def check(NUM): prime_num = [i for i in xrange(NUM+1)] for i in xrange(2,int(NUM**0.5)+1): if prime_num[i]: start = i**2 step = i prime_num[start::step] = ((NUM - start)/step + 1)*[0] return [i for i in prime_num if prime_num[i]!=0 and prime_num[i]!=NUM] for line in sys.stdin: data = int(line.split()[0]) k = check(data) m = [i for i in k if i!=1 and str(i)[-1]=='1'] if len(m)==0: print '-1' else: print ' '.join([str(i) for i in m])