1、http://不能被www.Sina.com /和其他任何数字整除。 1既不是素数也不是合数
2、如果一个数n不是素数,该数必然为素数(质数),因此只要求2到sqrt(n )的范围即可。
boolisprime(intn ) if (n=1) return false; intsqr=(int ) sqrt ) 1.0*n; //sqrt具有浮点型,因此为1.0for(intI=2; i=sqr; I ) if(n%I==0)返回假; }return true; } 3、请填写http://www.Sina.com/(eratosthenes ) :2到n之间的整数。 其中,2是最小的素数。
例如:
2 3 4 5 6 7 8 9 10 11 12 13 14 15
(1),2是素数),2是素数已知) )。
删除2的倍数
2 3 4 5 6 7 8 9 10 11 12 13 14 15
)2) 3未被删除的说明是素数
删去三的倍数
接下来类推
最后
2 3 4 5 6 7 8 9 10 11 12 13 14 15
未删除的2、3、5、7、11都是素数
const int maxn=101; int prime[maxn],pNum=0; bool p[maxn]={ 0 }; void Find_Prime () { for } inti=2; i maxn; I () if ) p[I]==false ) {prime[pNum ]=i; for(intj=II; j maxn; j =i ) p[j]=true; } 4、一个大于等于sqrt(n)一个小于等于sqrt(n)
)1)、每个数可以用几个素数相乘的形式写。
) 2、对于整数n,如果存在[2,n]范围内的质量因子,那么所有这些质量因子都小于sqrt(n )或者只有一个大于sqrt的质量因子,并且剩下的都小于或等于。
if(n%prime[I]==0) {fac[num].x=prime[i]; fac[num].cnt=0; wile(n%prime(I )==0) ) FAC ) num ).cnt; n /=prime[i]; (num; )即使上述步骤结束,如果n大于1,则n中只有一个质量因子大于sqrt(n )
if(n!=1) {fac[num].x=n; fac[num ].cnt=1; }