好!再来个!OK?
对不礼貌的女生收钱......
好!再来个!OK?
“说你胖就喘”,偶这人经不起夸。那就再弄个“素数判别”吧
#include<stdio.h>
isPrime(int n)
{
static i=2;
return n<i*i?(i=2,1):n%i?
(++i,isPrime(n)):(i=2,0);
}
main()
{
int n;
for(n=2;n<=100;n++)
if(isPrime(n))printf("%d\t",n);
}
代码稍长、效率更高
int isPrime(int n)
{
static i=2;
return n<i*i?(i=2,1):n%i?
(i+=1+(i>2),isPrime(n)):(i=2,0);
}
c++下代码更短(用及默认参数)
#include<iostream.h>
int prime(int n,int i=2)
{ return n<i*i?1:n%i?prime(n,i+1):0; }
void main()
{ for(int i=2;i<=100;i++)
if(prime(i))cout<<i<<" ";
cout<<endl;
}
如果对象是一组奇数则只要用3,5,7,...试除,于是有
#include<iostream.h>
int prime(int n,int i=3)
{ return n<i*i?1:n%i?prime(n,i+2):0; }
void main()
{ cout<<2<<" ";
for(int i=3;i<100;i+=2)
if(prime(i))cout<<i<<" ";
cout<<endl;
}
#include<stdio.h>
isPrime(int n)
{
static i=2;
return n<i*i?(i=2,1):n%i?
(++i,isPrime(n)):(i=2,0);
}
能说下(i=2,1)和(i=2,0)是怎么执行的吗?它不是就取右边的数吗?
我开始有些不能理解阁下的程序了!
return n<i*i?(i=2,1):n%i?(++i,isPrime(n)):(i=2,0);
用自然语言说就是:如果n小于i的平方,则首先恢复static i的初值2
接着返回1;否则的话测试i是否n的因子,若不是
则递归;否则首先恢复static i的初值2,然后宣告
不是素数。