时间限制:1 秒
内存限制:32 兆
特殊判题:否 提交:6479
解决:2176
题目描述:
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入:
输入有多组数据。
每组一行,输入n。
输出:
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入:
100
样例输出:
11 31 41 61 71
来源:
2008年北京航空航天大学计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7886-1-1.html
来源: http://ac.jobdu.com/problem.php?pid=1163
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <stdio.h> int prime[10000]; int primeSize; char mark[10001]; void init() { int i=1; for(; i<=10000; ++i) mark[i]=0; primeSize=0; for(i=2; i<=10000; ++i) { if(mark[i]) continue; prime[primeSize++]=i; int j=i*i; //注意:i*k,而当k<i时其所有倍数已经被标记完了,所以从i*i开始 for(; j<=10000; j+=i) mark[j]=1; } } int main() { #ifndef ONLINE_JUDGE freopen("E:\jsj\cprojects\docs\in.txt","r",stdin); //freopen("E:\jsj\cprojects\docs\mout.txt","w",stdout); #endif init(); int n,i; while(~scanf("%d",&n)) { char isOutput=0; for(i=0; i<primeSize; ++i) { if(prime[i]<n&&prime[i]%10==1) { if(isOutput==0) { isOutput=1; printf("%d",prime[i]); } else printf(" %d",prime[i]); } } if(isOutput==0) printf("-1n"); else printf("n"); } return 0; }
|