题目:判断给定的一个数是否为质数.
质数定义:
质数(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;
}