| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 591 人关注过本帖
标题:关于位与运算符问题
只看楼主 加入收藏
glhz610
Rank: 2
等 级:论坛游民
帖 子:33
专家分:44
注 册:2010-4-4
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:1 
关于位与运算符问题
看到一个例题,判断给的参数是否是素数,函数如下:
#include<stdio.h>
#include<match.h>
int prime(int n)
{
int i=3,j;
if(n<=0||(!(n & 1) && n!=2))
   return 0;
for(j=sqrt(n);i<=j;i+=2)
  if(!(n%1))
    return 0;
return 1;

}

请大虾解释下,这里面是怎样实现判断的的,尤其是(n<=0||(!(n & 1) && n!=2))这个表示什么意思? 谢谢了


[ 本帖最后由 glhz610 于 2010-5-13 19:42 编辑 ]
搜索更多相关主题的帖子: 运算符 
2010-05-13 19:05
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:20 
n<=0||(!(n & 1) && n!=2)   -->把小于0的,为偶数(偶数的最低位不为0)并且不等于2的数过滤掉,因为这些数肯定不是素数

for(j=sqrt(n);i<=j;i+=2) -->步长为2,不考虑偶数(i从3开始);j*j <= n, 如果n不是素数,则它可以表示为a*b = n, a,b是一对,当a>j时,b肯定要小于j,所以
                               我们只要计算到j就可以了,因为j以上的数如果存在被n整除,那么j以下的数肯定也存在一个数被n整除
  if(!(n%i)) //是不是写错了,应该是i不是1,如果i能被整除,那它就不是素数了,返回0;如果此循环结束了函数仍未返回,那么n就是一个素数,返回1
    return 0;


2010-05-13 19:47
快速回复:关于位与运算符问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037266 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved