您的位置:首页 > 其它

天勤OJ 题目1135: 素数

2013-02-12 17:42 316 查看
题目描述

输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。



输入

输入有多组数据。

每组一行,输入n。



输出

输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。



样例输入

70




样例输出

11 31 41 61




/*********************************
*   日期:2013-2-12
*   作者:SJF0115
*   题号: 天勤OJ 题目1135: 素数
*   来源:http://acmclub.com/problem.php?id=1135
*   结果:AC
*   来源:2008年北京航空航天大学计算机研究生机试真题
*   总结:
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main()
{
	int n,i,j,flag,index;
	int prime[10001];//素数表
	//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
	while(scanf("%d",&n) != EOF)
	{
		index = 0;
		for(i = 11;i < n;i += 10){
			flag = 0;
			//判断是否是素数
			for(j = 2;j <= sqrt(i);j++){
				if(i % j == 0){
					flag = 1;
					break;
				}
			}
			//是素数
			if(flag == 0){
				prime[index++] = i;
			}
		}
		//如果没有则输出-1。
		if(index == 0){
			printf("-1\n");
		}
		else{
			//输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数
			for(i = 0;i < index-1;i++){
				printf("%d ",prime[i]);
			}
			printf("%d\n",prime[index-1]);
		}
	}
	return 0;
}


/*********************************
*   日期:2013-2-12
*   作者:SJF0115
*   题号: 天勤OJ 题目1135: 素数
*   来源:http://acmclub.com/problem.php?id=1135
*   结果:AC
*   来源:2008年北京航空航天大学计算机研究生机试真题
*   总结:
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main()
{
    int n,i,j;
    int prime[10001];//素数表
    //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
    while(scanf("%d",&n)!=EOF)
    {
		//筛法求素数
        for(i = 2;i < n;i++){
            //偶数不是素数
            if(i % 2 == 0){
                prime[i] = 0;
            }
            //奇数
            else{
                prime[i] = 1;
            }
        }
        for(i = 3;i < sqrt(n);i++){
            //如果当前是素数进行调整
            if(prime[i]){
                //奇数的倍数不是素数
                for(j = i+i;j < n;j += i){
                    prime[j] = 0;
                }
            }
        }
		//输出
		if(n <= 11){
			printf("-1\n");
		}
		else{
			printf("11");
			for(i = 12;i < n;i++){
				if(prime[i] && i%10 == 1){
					printf(" %d",i);
				}
			}
			printf("\n");
		}
    }
    return 0;
}


/********************************* 
*   日期:2013-3-20
*   作者:SJF0115 
*   题号: 题目1135: 素数
*   来源:http://ac.jobdu.com/problem.php?pid=1135
*   结果:AC 
*   来源:2008年北京航空航天大学计算机研究生机试真题
*   总结: 
**********************************/ 
#include<stdio.h>
#include<string.h>
#define MAXSIZE 10001

int Mark[MAXSIZE];
int prime[MAXSIZE];

//判断是否是一个素数
int Prime(){
	int index = 0;
	memset(Mark,0,sizeof(Mark));
	for(int i = 2;i < MAXSIZE;i++){
		//已被标记
		if(Mark[i] == 1){
			continue;
		}
		else{
			//否则得到一个素数
			prime[index++] = i;
			//标记该素数的倍数为非素数
			for(int j = i*i;j < MAXSIZE;j += i){
				Mark[j] = 1;
			}
		}
	}
	return index;
}

int main (){
	int a,first,index;
    while(scanf("%d",&a) != EOF){
		first = 1;
		index = Prime();
		for(int i = 2;i <= index;i++){
			//素数
			if(prime[i] < a && prime[i] % 10 == 1){
				if(first){
					first = 0;
				}
				else{
					printf(" ");
				}
				printf("%d",prime[i]);
			}
		}
		if(first){
			printf("-1\n");
		}
		else{
			printf("\n");
		}
    }//while
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: