扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这是我写的
成都创新互联公司专业为企业提供惠农网站建设、惠农做网站、惠农网站设计、惠农网站制作等企业网站建设、网页设计与制作、惠农企业网站模板建站服务,10年惠农做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
找出100—1000之间的所有可逆素数,要求判断素数、颠倒顺序的功能分别用自定义函数来实现。(可逆素数是指一个素数的各位数值顺序颠倒后得到的数仍为素数。例如:113、311)其中int
IsPrime(int
n)是判断素数,请参考
#
include
#include
using
namespace
std;int
IsPrime(int
n)
{
int
i;
if(n
2)
return
0;
else
if(n
==
2)
return
1;
if(n
%
2
==
0)
return
0;
for(i
=
3;
i
*
i
=
n;
i
+=
2)
if(n
%
i
==
0)
return
0;
return
1;
}
void
main()
{
char
x[4];
char
tmp[4];
for
(int
n=100;n1000;n++)
{if(
IsPrime(n))
{
sprintf(tmp,
"%d",
n);
x[2]=tmp[0];
x[1]=tmp[1];
x[0]=tmp[2];
int
val
=
atoi(x);
if
(IsPrime(val))
{
cout
评论
加载更多
代码如下:
#includestdio.h
int foundit(int i) // 按照题意,定义了一个函数,判断是否素数
{
int avg;
int k;
avg=(int)sqrt(i);
for (k=3;k=avg;k+=2) // 直接从 3 开始,因为 i 是奇数。
if (i % k ==0) // 余数为0,说明不是素数
return 0;
return 1;
}
int main()
{
int i; // 循环变量
int sushu=2; // 2是素数,直接保存下来。
for(i=3;i1000;i+=2) // 扫描 3 到 1000 之间的所有奇数
{
if(foundit(i)==1)
{
if(i-sushu==2)
printf("%d 和 %d、",sushu,i);
sushu=i;
}
}
return 0;
}
运行的结果:
3和5、5和7、11和13、17和19、29和31、41和43、59和61、71和73、101和103、107和109、137和139、149和151、179和181、191和193、197和199、227和229、239和241、269和271、281和283、311和313、347和349、419和421、431和433、461和463、521和523、569和571、599和601、617和619、641和643、659和661、809和811、821和823、827和829、857和859、881和883
在程序的开头加入#includemath.h
下面是fun函数:
int fun(int mm,int b[MAX])
{
int i,mmm,n=0;
for(mmm=2;mmm=mm;mmm++)
{
for(i=2;i=sqrt(mmm);i++)
if(mmm%i==0) break;
if(isqrt(mmm))
{
b[n]=mmm;
n+=1;
}
}
return n;
}
分析:
如果mm=1,外循环不启动,直接返回n,此时n=0
如果mm=2,外循环启动,内循环i=sqrt(mmm)的条件不满足,不启动,内循环下面的判断条件满足,于是让b[n]=mmm,n+=1,即找到一个符合条件的素数,此时b[n]既b[0]=2,然后n+=1,表示符合条件的素数的个数加1
同样,当mm=3的时候,内循环由于条件不满足,是不会执行的,但是在内循环下面的条件判断都满足,所以会把结果保存在n和b[n]里面,这时,外循环要执行2次
当mm3时,内循环也会启动,但是要等内循环结束之后i的值满足条件的才是素数,程序的可靠信完全可以放心
刚刚又重新分析了一遍代码,稍微改了改,没问题了
楼上说的不错,判断一个数是否是素数就这么算就行。但是楼上程序写的有瑕疵,sqrt不应该写在for里面,而是在for前面赋值,因为sqrt很耗时间。
如果是求类似于1000以内有多少个素数的话,每个素数的判断方式就不是判断是否能整除从2开始到该数的开方,而是判断是否能整除从2开始到该数开方之间的素数。这样效率会高很多。
#include stdio.h
int is_prime_number(int n)
{
int i;
int result = 1;
if(n==1)
return 0;
for(i=2;in;i++)
{
if(n%i==0)
{
result = 0;
break;
}
}
return result;
}
int main()
{
int n;
printf("100以内的素数包括:\n");
for(n=1;n=100;n++)
{
if(is_prime_number(n))
{
printf("%d ",n);
}
}
printf("\n");
return 0;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流