java运行程序没有进行运算

Yeoh1999 2018-10-17 09:58:20
大学学习java ,实践一个程序,要求运行出小于100的素数。 程序编写正确,cmd命令打开正确,但是最后没有出来 小于100的素数具体有哪些,只有一句话"小于100的素数有"后面却没有数字
...全文
328 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yeoh1999 2018-10-24
  • 打赏
  • 举报
回复
引用 12 楼 火龙果被占用了的回复:
Miller-Rabin 素性测试算法实现如下,供为参考


public class PrimeTest {

public static void main(String[] args) {

for ( int i = 2 ; i < 100 ; i++ ) {
if ( !MillerRabin.isComposite( i ) ) {
System.out.println( i );
}
}
}

public static class MillerRabin {

public static boolean isComposite(int n) {
if (n < 2) {
throw new IllegalArgumentException("number must greater than or equals 2");
}

if (n == 2 || n == 3 || n == 5 || n == 7) {
return false;
}

if ((n & 1) == 0) {
return true;
}

if (n % 3 == 0) {
return true;
}
if (n % 5 == 0) {
return true;
}
if (n % 7 == 0) {
return true;
}

int s = 0, d = n - 1;
while ((d & 1) == 0) {
d >>= 1;
s++;
}

if (n < 1373653) {
if (loopMillerRabin(s, d, n, 2, 3)) {
return true;
}
} else if (n < 9080191) {
if (loopMillerRabin(s, d, n, 31, 73)) {
return true;
}
} else {
// 4,759,123,141 已经超过 int 的最大值,因此大于等于 9080191 就采用 4,759,123,141 的基准测试
if (loopMillerRabin(s, d, n, 2, 7, 61)) {
return true;
}
}
return false;
}

private static boolean loopMillerRabin(int s, int d, int n, int... t) {
for (int i = 0; i < t.length; i++) {
if (testMillerRabin(t[i], s, d, n)) {
return true;
}
}
return false;
}

private static boolean testMillerRabin(int a, int s, int d, int n) {
if (montgomery(a, d, n) != 1) {
int e = 1;
for (int i = 0; i < s; i++) {
if (montgomery(a, d * e, n) + 1 == n) {
return false;
}
e <<= 1;
}
return true;
}
return false;
}

private static int montgomery(int base, int exp, int mod) {
if (base > 46340 || mod > 46340) {
long temp = 1;
long prod = base % mod;
while (exp > 1) {
if ((exp & 1) != 0) {
temp = (temp * prod) % mod;
}
prod = (prod * prod) % mod;
exp >>= 1;
}
return (int) ((temp * prod) % mod);
} else {
int temp = 1;
int prod = base % mod;
while (exp > 1) {
if ((exp & 1) != 0) {
temp = (temp * prod) % mod;
}
prod = (prod * prod) % mod;
exp >>= 1;
}
return (temp * prod) % mod;
}
}
}
}
哇!!!实在不好意,没想到会有人回复,第一次在这里问问题,我以为可以贴图片,打代码好麻烦。问题已经解决了,我后来把代码拷贝,在自己的电脑重新试了下,发现有些语法错误。不过让我很纳闷的是,在学校的机房这些代码是可以运行的,不过就是输出结果不完整,"小于一百的素数有"就没了结果,但是在自己的电脑上给我报了有几个位置的括号有问题也就是无法识别,改了以后就好了
Yeoh1999 2018-10-24
  • 打赏
  • 举报
回复
引用 1 楼 yc_39的回复:
代码呢?看下代码
哇!!!实在不好意,没想到会有人回复,第一次在这里问问题,我以为可以贴图片,打代码好麻烦。问题已经解决了,我后来把代码拷贝,在自己的电脑重新试了下,发现有些语法错误。不过让我很纳闷的是,在学校的机房这些代码是可以运行的,不过就是输出结果不完整,"小于一百的素数有"就没了结果,但是在自己的电脑上给我报了有几个位置的括号有问题也就是无法识别,改了以后就好了
Yeoh1999 2018-10-24
  • 打赏
  • 举报
回复
哇!!!实在不好意,没想到会有人回复,问题已经解决了,我后来把代码拷贝,在自己的电脑重新试了下,发现有些语法错误。不过让我很纳闷的是,在学校的机房这些代码是可以运行的,不过就是输出结果不完整,"小于一百的素数有"就没了结果,但是在自己的电脑上给我报了有几个位置的括号有问题也就是无法识别,改了以后就好了
  • 打赏
  • 举报
回复
Miller-Rabin 素性测试算法实现如下,供为参考


public class PrimeTest {

public static void main(String[] args) {

for ( int i = 2 ; i < 100 ; i++ ) {
if ( !MillerRabin.isComposite( i ) ) {
System.out.println( i );
}
}
}

public static class MillerRabin {

public static boolean isComposite(int n) {
if (n < 2) {
throw new IllegalArgumentException("number must greater than or equals 2");
}

if (n == 2 || n == 3 || n == 5 || n == 7) {
return false;
}

if ((n & 1) == 0) {
return true;
}

if (n % 3 == 0) {
return true;
}
if (n % 5 == 0) {
return true;
}
if (n % 7 == 0) {
return true;
}

int s = 0, d = n - 1;
while ((d & 1) == 0) {
d >>= 1;
s++;
}

if (n < 1373653) {
if (loopMillerRabin(s, d, n, 2, 3)) {
return true;
}
} else if (n < 9080191) {
if (loopMillerRabin(s, d, n, 31, 73)) {
return true;
}
} else {
// 4,759,123,141 已经超过 int 的最大值,因此大于等于 9080191 就采用 4,759,123,141 的基准测试
if (loopMillerRabin(s, d, n, 2, 7, 61)) {
return true;
}
}
return false;
}

private static boolean loopMillerRabin(int s, int d, int n, int... t) {
for (int i = 0; i < t.length; i++) {
if (testMillerRabin(t[i], s, d, n)) {
return true;
}
}
return false;
}

private static boolean testMillerRabin(int a, int s, int d, int n) {
if (montgomery(a, d, n) != 1) {
int e = 1;
for (int i = 0; i < s; i++) {
if (montgomery(a, d * e, n) + 1 == n) {
return false;
}
e <<= 1;
}
return true;
}
return false;
}

private static int montgomery(int base, int exp, int mod) {
if (base > 46340 || mod > 46340) {
long temp = 1;
long prod = base % mod;
while (exp > 1) {
if ((exp & 1) != 0) {
temp = (temp * prod) % mod;
}
prod = (prod * prod) % mod;
exp >>= 1;
}
return (int) ((temp * prod) % mod);
} else {
int temp = 1;
int prod = base % mod;
while (exp > 1) {
if ((exp & 1) != 0) {
temp = (temp * prod) % mod;
}
prod = (prod * prod) % mod;
exp >>= 1;
}
return (temp * prod) % mod;
}
}
}
}
隐语者 2018-10-18
  • 打赏
  • 举报
回复
本来想粘贴复制水一波经验,你倒好,让我无语。代码都没有,鬼知道你怎么写的!
自由自在_Yu 2018-10-18
  • 打赏
  • 举报
回复
贴出你的代码,是不是输出语句没有写?
门口塘 2018-10-17
  • 打赏
  • 举报
回复
没有代码怎么解答哦,兄弟
Silly-77 2018-10-17
  • 打赏
  • 举报
回复
兄弟 下次提问的时候记得帖出代码
Weyland7 2018-10-17
  • 打赏
  • 举报
回复
田忌对齐威王说:“可是我徒弟没有带马出来呀”
齐威王说:“没带马?没带马你说个几把”
Weyland7 2018-10-17
  • 打赏
  • 举报
回复
齐威王对田忌说:“你我都已年迈,不如今年的赛马交给年轻人来,就让我们的徒弟比试比试吧”
wwt736336357 2018-10-17
  • 打赏
  • 举报
回复
老哥,你这问题就像
我丢了只动物,他叫小花,你们猜猜小花是啥动物
yc_39 2018-10-17
  • 打赏
  • 举报
回复
代码呢?看下代码
初尘19 2018-10-17
  • 打赏
  • 举报
回复
质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。例如2,3,5,7,11。。。
十八道胡同 2018-10-17
  • 打赏
  • 举报
回复
引用 楼主 Yeoh1999 的回复:
大学学习java ,实践一个程序,要求运行出小于100的素数。
程序编写正确,cmd命令打开正确,但是最后没有出来 小于100的素数具体有哪些,只有一句话"小于100的素数有"后面却没有数字


帖出代码

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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