输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入格式
输入有多组数据。
每组一行,输入n。
输出
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入
70
样例输出
11 31 41 61
此题让我第一次觉得别人的代码不一定比我的好
至少我是简单的 没用函数
我的代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int n,a[1000],i,j,e,f;
while (scanf("%d",&n)!=EOF){
e=1;f=0;
for(i=2;i<n;i++)
{
for(j=2;j<sqrt(i);j++)
if(i%j == 0)
break;
else if(j>sqrt(i)-1 && i%10==1){
if (e==0){
printf("% d",i); f=1;
}
if (e==1)
printf ("%d",i);f=1,e=0;
} //换行技巧
}
if (f==0) printf("-1");
printf("\n");
}
return 0;
}
后来我看了下别人的代码如下:
#include <stdio.h>
bool s[10001];
int ans[10000];
void init()
{
int i,j=0,k;
for(i=2;i<=10000;i++)
s[i] = false;
for(i=2;i<=10000;i++) {
if(s[i] == true) continue;
ans[j++] = i;
for(k=i*i;k<=10000;k+=i)
s[k] = true;
}
}
int main() {
int n,i;
init();
while(scanf("%d",&n)!=EOF) {
bool first = true;
for(i=2;i<n;i++) {
if(!s[i] && i%10==1) {
if(first) {
printf("%d",i);
first = false;
}
else
printf(" %d",i);
}
}
if(first)
printf("-1");
printf("\n");
}
return 0;
}