怎样判断一个数n是质数(素数)还是和数?

angel6709 2009-06-16 01:30:45
数论永远是个永恒的话题,我以前有看过,好像是2的n-1次幂有关。。。
...全文
1297 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjim 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 sbwwkmyd 的回复:]
引用 19 楼 qldsrx 的回复:
引用 6 楼 sbwwkmyd 的回复:
如果A,B互质;(A^(B-1))%B!=1,则B为合数,否则B极有可能为素数,也可能是伪素数.


哪里看来的?没有任何根据,我试了几组数据,都是返回true,无论是否互质。


^是乘方,不是异或
[/Quote]
另外,我说的是"如果互质",排除了"非互质"的情况
showjim 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 qldsrx 的回复:]
引用 6 楼 sbwwkmyd 的回复:
如果A,B互质;(A^(B-1))%B!=1,则B为合数,否则B极有可能为素数,也可能是伪素数.



哪里看来的?没有任何根据,我试了几组数据,都是返回true,无论是否互质。
[/Quote]
^是乘方,不是异或
angel6709 2009-06-17
  • 打赏
  • 举报
回复
不讨论了,结贴,谢谢大家参与。
柳晛 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 qldsrx 的回复:]
楼上在那里吹牛了,你知道哪些是素数?不知道有哪些素数的话怎么找素数的倍数,要是知道还用问那个是不是素数?
[/Quote]

我说的是找素数,找素数哪能无限地找下去?
比如100以内的非素数就是10以内素数的倍数,以此类推。
注册失败 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 angel6709 的回复:]
能不能得出这样的结论:
不能被n^(1/2)+1以前的所有的质数整除的数就是质数。。。
但问题是怎么得出这样的东西:
a.
n1=2
n2=3
n3=5
n4=7
n5=11
n6=13
nm=m表达式
[/Quote]

楼主又在造轮子。。。
不能被n^(1/2)+1以前的所有的质数整除的数就是质数。。。
这句话是数论里的一个推论,不过原话不是这个说的,意思一样。
楼主,造轮子之前先看看书吧

对于nm=m表达式
这个全世界人都在寻找,楼主找到了,就可以获得菲尔兹奖了
qldsrx 2009-06-16
  • 打赏
  • 举报
回复
楼上在那里吹牛了,你知道哪些是素数?不知道有哪些素数的话怎么找素数的倍数,要是知道还用问那个是不是素数?
柳晛 2009-06-16
  • 打赏
  • 举报
回复
纠正:如果是找素数的话,除去素数的倍数,其余都是素数。
柳晛 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 asdf311 的回复:]
不要从 2 检查到 n-1 的,只要检查到 n^(1/2) 就行了,为了保证正确,向上取整。
[/Quote]

对,比如3x3=9,不需要4.5*4.5即可。

如果是找素数的话,除去素数的公倍数,其余都是素数。
zenowolf 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zcalll 的回复:]
C# codepublic bool IsZhiShu(int value)
{
if(value==2)
return true;

for(int i=2; i<value; i++)
{
if(value%i == 0)
return false;
}

return true;
}
[/Quote]
我来优化下
public bool IsZhiShu(int value)
{
if(value==2)
return true;

for(int i=2; i<int.parse(Math.Sqrt(value)); i++)
{
if(value%i == 0)
return false;
}

return true;
}
qldsrx 2009-06-16
  • 打赏
  • 举报
回复
测试这个函数,将会得到你要的结果,如果是素数,就显示为true

public static void test(int N)
{
int start = 2, limit = N/2;
bool isprime = true;
while (start < limit)
{
if (N % start == 0)
{
isprime = false;
break;
}
else
{
start++;
limit = N / start;
}
}
Console.WriteLine(isprime);
}


基本原理是,一个非素数,至少应该拆分成两个数的乘积,那么我们只要找下是否存在这么两个数就够了,如果那个数是10000,极限就是100×100,也就是遍历100次,还是很快的,但要是换作二分法,你可是要遍历5000次,差距多大可想而知了吧。
qldsrx 2009-06-16
  • 打赏
  • 举报
回复
可以那么理解,不过似乎是个笨办法,等我想个更好的方法给你。
angel6709 2009-06-16
  • 打赏
  • 举报
回复
能不能得出这样的结论:
不能被n^(1/2)+1以前的所有的质数整除的数就是质数。。。
但问题是怎么得出这样的东西:
a.
n1=2
n2=3
n3=5
n4=7
n5=11
n6=13
nm=m表达式
wewei123shangdawei 2009-06-16
  • 打赏
  • 举报
回复

import java.util.*;



public class zhishu {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

String answer = "";

do {

int count = 0;

System.out.println("请输入您要判断的数:");

int num = input.nextInt();

for (int i = 1; i <= num; i++) {



if (num % i == 0) {

count++;

}

}

if (count == 2) {

System.out.print("这个数是质数");



}else if(count == 1) {

System.out.print("这个数既不是质数也不是合数");

} else {

System.out.print("这个数是合数");

}

System.out.println("\n\n继续吗 (y/n)?");

answer = input.next();

} while (answer.equals("y"));

System.out.println("程序结束!");



}

}



qldsrx 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sbwwkmyd 的回复:]
如果A,B互质;(A^(B-1))%B!=1,则B为合数,否则B极有可能为素数,也可能是伪素数.
[/Quote]

哪里看来的?没有任何根据,我试了几组数据,都是返回true,无论是否互质。
desegou 2009-06-16
  • 打赏
  • 举报
回复
哦,对哦,那我的结论可以否定
angel6709 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 desegou 的回复:]
好像满足除以2、3、5除不尽的就是素数,所以算法的话判断这三种情况就可以了
[/Quote]
想了想还是不对呀,77/2,3,5都除不断,但他是7*11的和数,。。。。
angel6709 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 angel6709 的回复:]
引用 14 楼 desegou 的回复:
好像满足除以2、3、5除不尽的就是素数,所以算法的话判断这三种情况就可以了


7呢,17呢37呢呵呵,
[/Quote]
奥,我看错了哈,是除不尽的啊,对不起了哈,有待研究
angel6709 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 desegou 的回复:]
好像满足除以2、3、5除不尽的就是素数,所以算法的话判断这三种情况就可以了
[/Quote]
7呢,17呢37呢呵呵,
desegou 2009-06-16
  • 打赏
  • 举报
回复
好像满足除以2、3、5除不尽的就是素数,所以算法的话判断这三种情况就可以了
angel6709 2009-06-16
  • 打赏
  • 举报
回复
public bool IsPrimeNumber(long value)
{
if (value == 2)
{
return true;
}

for (long i = 2; i <= Math.Ceiling(Math.Sqrt(value)); i++)
{
if ((value % i) == 0)
{
return false;
}
}

return true;
}
先判断n是不是偶数,
然后i=2改成从3开始i++改成:i+=2效率会更好哈
加载更多回复(12)

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧