给定一个整数m(50<m<20000),找出小于m的最大的10个素数。
输入格式:
输入在一行中给出一个正整数m(50<m<20000)。
输出格式:
在一行中按递减顺序输出10个满足条件的素数,每个素数输出占6列。没有其它任何附加格式和字符。
样例">样例">样例">输入样例:
229
输出样例:
227 223 211 199 197 193 191 181 179 173
感谢中国青年政治学院的同学修正数据!
作者 王淑琴
单位 天津师范大学
代码长度限制 1000 KB
时间限制 400 ms
内存限制 64 MB
#include<stdio.h>
#include<math.h>
int main(){
int i,num,j,k=0;
int a[100],count=0;
int z=0;
scanf("%d",&num);
if(num > 50 && num < 20000){//给定num范围
num--;//减小num,才能找出小于num的最大素数,也方便给后面的数组赋值
for(i=num;i>sqrt(num);i--){
for(j=2;j<sqrt(num);j++){
if(num%j==0)
break;//触发该if便直接退出循环
}
if(j>sqrt(num)){//如果大于,说明上层循环判断完毕,这num一定是素数
//统计count+1(后面如果conut==10时直接退出循环),
//给a[k]赋值,k++(移动数组下标),num--(减小num,重新进入循环)
count++;
a[k] = num;
k++;
num--;
}else
num--;
if(count == 10)break;//count到十直接退出循环
}
for(z=0;z<10;z++){ //循环输出数组
printf("%6d",a[z]);
}
}
return 0;
}
第二种
#include <stdio.h>
#include <math.h>
int main(){
int limit, m;
int a=0;
int i;
scanf("%d",&m);
limit = sqrt(m)+1;
m=m-1;
for(m;m>sqrt(m);m--){
for(i=2;i<=limit;i++){
if(m%i ==0){
break;
}
}
if(i>sqrt(m)){
a++;
printf("%6d", m);
}
if(a==10){
break;
}
}
return 0;
}