1517 - 素数

通过次数

0

提交次数

0

时间限制 : 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])