轻松求素数
来源:互联网 发布:罗素文集 知乎 编辑:程序博客网 时间:2024/04/27 08:32
没有作什么溢处判断.比如n 超过int 最大值,数组长度小于 len等.作为素数条件
1.素数一定是奇数 :)
2.素数只能整除1和他自己
3.奇数如果不能整除比他小的素数,则为素数。这个范围可以更小,就是除到比这个数开方小的素数即可
如果都不能整除则此数为素数。当然不能在程序里面做开方运算,速度太慢。换作 n < array[j] * array[j]
相对乘法比开方除法快
//保证array 开辟区间比len大
void prime(int* array,int len)
{
array[0] = 2; //数组至少有一个空间
int n = 3;
for(int i=1;i<len;i++) //从第二个素数开始
{
for(int j=0;j<i;j++)
{
if(n%array[j] == 0)
{
n += 2; //奇数作为素数的侯选者
j=0;
continue;
}
if(n < array[j] * array[j]) //如果汇编的话一次除法可以的到商和余数,但c里面只能一次一个。用乘法取代除
break;
}
array[i] = n;
n += 2;
}
}
下面是简单求一个偶数拆成两个素数的程序:
int a,b,c,d;
int temp;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{
temp = sqrt((float)b);
for(c=2;c<=temp;c++)
{
if(b%c==0)
{
break;
}
}
if(c>temp)
d=a-b;
else
break;
temp = sqrt((float)d);
for(c=2;c<=temp;c++)
{
if(d%c==0)
{
break;
}
}
if(c>temp)
printf("%d=%d+%d/n",a,b,d);
}
- 轻松求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 求素数
- 清华VS麻省:对比后,才知道我们的教育是多么失败zz
- 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)
- 男人必看得5个故事
- 客观的评价西北工业大学
- Java 实现连接sql server 2000(JDBC数据库访问例子)
- 轻松求素数
- 谈点关于SmartClient的个人看法。
- 放弃了?=从新开始?
- RSS开源项目正式定名为iRSS
- 对jpspan的一点研究
- test
- 数据访问有哪些模式?
- 在知道对方机器的IP(局域网内)用户 密码,实现远程重启
- J2EE安全策略:为tomcat页面设置访问权限(j_security_check)