赞
踩
// 素数问题。输入两个正整数m和n(1<=m<=n<=500)
//输出m和n之间的全部素数,每行输出10个。
-
- //使用嵌套循环解决该问题
- #include<stdio.h>
- #include<math.h>
- int main(void)
- {
- int n,m,i,k;
- int flag;
- int limit; //flag用来判断时是否为素数
- int count = 0;
- printf("Enter m and n:");
- scanf("%d%d",&m,&n);
- if(m<1||n>500||m>n){
- printf("Invalid!\n");
- }else{
- for(k=m;k<=n;k++){
- if(k<=1){
- flag=0;
- }else if(k==2){
- flag=1;
- } else{
- flag=1; //先假设k是素数
- limit=sqrt(k)+1;
- for (i=2;i<=limit;i++){
- if(k%i==0){ //若k能被某个i整除,则k不是素数
- flag=0; //置flag为0
- break;
- }
- }
- }
- if(flag==1){
- printf("%6d",k);
- count++;
- if(count%10==0){
- printf("\n");
- }
- }
- }
- }
- return 0;
- }

测试用例:Enter m and n:1 50
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47
这个问题与判断素数问题相反,判断素数是判断数m在[2,m]之间能否被整除。而此题则是先假设其是素数,引用flag进行判断,置flag为1,若k能被[2,
limit]中的某个数整除,则说明k不是素数,将flag改为0;这样,在内层循环结束后,flag的值表示k是否为素数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。