pat 乙级 1013 数素数(20分)


思路:


我一开始的思路 就是 找出 前10000万个数组 然后 直接打印即可 ;


代码: 



#include <stdio.h>  
#include <iostream>  
#include <cstdlib>  
#include <cmath>  
#include <cctype>  
#include <string>  
#include <cstring>  
#include <algorithm>  
#include <ctime>  
  
using namespace std;  
  
int isprime(int a)    // 判断是否是素数     
{    
    if (a%2==0&&a!=2)    
    {    
        return 0;    
    }    
    for (int i=3;i<=sqrt(a) ;i++ )    
    {    
        if (a%i==0)    
        {    
            return 0;    
        }    
    }    
    return a!=1;    
}  
  
int main()   
{  
    int prime[100000]={0};  
    int j=1;  
    for (int i = 0; i < 100000; ++i)  
    {  
        if(isprime(i)) {  
              
            prime[j]=i;  
            j++;  
        }  
          
    }  
  
    int M,N;  
    cin>>M>>N;  
    int count=0;  
    for(int i=M;i<=N;i++)    
    {    
        if(count/10!=0&&count%10==0)    
           printf("\n");    
        if(count%10==0)    
           printf("%ld",prime[i]);    
        else    
           printf(" %ld",prime[i]);    
  
       count++;  
    }    
    return 0;  
}  


然后 结果19分 .... :





后来 试着把 数组的长度 开大了一点 ;

然后 :



竟然过了 !!!


可以可以。

两次 的代码 没什么不同  ,就只有 一开始 数组大小  100000,,后来 改为110000 结果 过了 


后来想想 的确 是这样 。因为毕竟严格意义来说第10000个素数是多少 我们也不知道 ,一开始 肯定是小了 ,然后后来 够了。。。。


#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <ctime>

using namespace std;

int isprime(int a)    // 判断是否是素数   
{  
    if (a%2==0&&a!=2)  
    {  
        return 0;  
    }  
    for (int i=3;i<=sqrt(a) ;i++ )  
    {  
        if (a%i==0)  
        {  
            return 0;  
        }  
    }  
    return a!=1;  
}

int main() 
{
	int prime[110000]={0};
    int j=1;
    for (int i = 0; i < 110000; ++i)
    {
    	if(isprime(i)) {
    		
    		prime[j]=i;
    		j++;
    	}
    	
    }

    int M,N;
    cin>>M>>N;
    int count=0;
   	for(int i=M;i<=N;i++)  
    {  
        if(count/10!=0&&count%10==0)  
           printf("\n");  
        if(count%10==0)  
           printf("%ld",prime[i]);  
        else  
           printf(" %ld",prime[i]);  

       count++;
    }  
    return 0;
}


把上一个代码的100000 换成了110000 就20分过了 。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值