复试训练——数学问题—— 素数筛选法

题目1047:素数判定

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:11932

解决:5385

题目描述:

给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。

输入:

测试数据有多组,每组输入一个数n。

输出:

对于每组输入,若是素数则输出yes,否则输入no。

样例输入:

13

样例输出:

yes

来源:

2009年哈尔滨工业大学计算机研究生机试真题

代码:

#include <stdio.h>
#include <math.h>
bool judge(int x){
	if(x<=1) return false;
	int bound=(int)sqrt(x)+1;
	int i;
	for(i=2;i<bound;i++){
		if(x%i==0) return false;
	}
	return true;
}
int main(){
	int x;
	while(scanf("%d",&x)!=0){
		puts(judge(x) ? "yes":"no");
	}
	return 0;
}

题目1163:素数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:10660

解决:3701

题目描述:

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

输入:

输入有多组数据。
每组一行,输入n。

输出:

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

样例输入:

100

样例输出:

11 31 41 61 71

来源:

2008年北京航空航天大学计算机研究生机试真题

代码:

#include <stdio.h>
int prime[10000];
int primeSize;
bool mark[10001];
void init(){
	int i;
	for(i=1;i<=10000;i++){
		mark[i]=false;
	}
	primeSize=0;
	for(i=2;i<=10000;i++){
		if(mark[i]==true)continue;
		prime[primeSize++]=i;
		int j;
		for(j=i*i;j<=10000;j+=i){
			mark[j]=true;
		}
	}
}
int main(){
	init();
	int n;
	while(scanf("%d",&n)!=EOF){
		bool isOutput=false;
		int i;
		for(i=0;i<primeSize;i++){
			if(prime[i]<n&&prime[i]%10==1){
				if(isOutput==false){
					isOutput=true;
					printf("%d",prime[i]);
				}
				else printf(" %d",prime[i]);
			}
		}
		if(isOutput==false){
			printf("-1\n");
		}else
			printf("\n");
	}
	return 0;
}

 

转载于:https://my.oschina.net/u/1996306/blog/831073

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值