判决素数个数(信息学奥赛一本通-T1409) 两种函数算法

判决素数个数(信息学奥赛一本通-T1409) 两种函数算法_第1张图片
第一种算法,参考自这里:

#include 
#include 
#include 
#include
using namespace std;
bool jisuan(int x);
int main(){
int x,y;
int i;
int sum=0;
cin>>x>>y;
for(i=x;i<=y;i++)
 if(jisuan(i))
	{
		sum++;
	}
cout<<sum<<endl;
	return 0;
}
bool jisuan(int x){
	int i=2;
if(x==1||x==0) return false;

    while( i<=floor(sqrt(x)) && (x%i!=0) )
    i++;
      if(i>floor(sqrt(x)))
        return true;
    return false;
} 

刚开始第一种有点难理解,于是我想了一下是否可以根据除数的个数来算素数,
既然素数只能被1和它本身整除,那只要设置能被整除的除数个数为2就行了
第二种算法

#include 
#include 
#include 
#include 
bool jisuan(int z);
using namespace std;

int main(){
int x,y;
int i;
int sum=0;
cin>>x>>y;
for(i=x;i<=y;i++)
if(jisuan(i)) sum++;
cout<<sum<<endl;
return 0;
}

bool jisuan(int z){
int a,i;
int b=0;
for(i=1;i<=z;i++)
if(z%i==0) b++;
if(b==2) return true;
return false;

}

存在问题:样例通过,OJ网站运行超时,真头疼
如果有大佬改进成功了请务必告诉我

你可能感兴趣的:(奥赛一本通题解)