质数的判定(仅供参考,不支持AC)

题目:判断给定的一个数是否为质数.

质数定义:

质数(prime number)又称素数,有无限个。

质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数.

理解:

假设给定一个正整数N,a,b;a*b<=N;

当且仅当N为质数时仅取<号.

设小数r,r*r=N;

可以得到不等式2<=a<=r<=b<N.

只要有一个a可满足,就有对应b可满足;

这样就可以将复杂度降低到N的0.5次方.

对于for(int i=2;i*i<=b;i++)将b换成pow(b,0.5)道理是一样的.但是运行速度会有差别.

就我当时的情况.时间限度是1000.我第一次用的是pow并且用c提交 test16的时候就已经1281.

但是如果用pow并且用c++提交的时候 875耗时.

对比一下用i*i的for循环用c提交耗时265;用c++提交是109.

编译器不同提交的耗时也会多少有影响,一般是不会影响做题结果.

由于这道题pow本身就消耗不少时间加上编译器的影响,就超时了(还是低估了pow对这道题的影响).

#include<stdio.h>
#include<math.h>
int main()
{
	int test;
	scanf("%d",&test);
	while(test>0)
	{
		int b;
		int temp=0;
		scanf("%d",&b);
		for(int i=2;i*i<=b;i++)
		{
	          if(b%i==0)
		  {
		  	temp=1;
		  	break;
		  }
		}
		if  (temp==1)
		{
		    printf("No\n");
		}
		else
		{
		    printf("Yes\n");
		}
		test--;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40989705/article/details/81143596