小编de_*_*ust的帖子

查找从2到1000的所有素数不起作用的算法

这是使用该语句计算从2到1000的所有素数的一段代码,数字n是素数iff:

在此输入图像描述

在第一个版本中,我认为我正确地实现了算法:

public class Giuga {

    public static void main(String[] args){
        int n = 2;

        while(n<=1000){
            int k = 1;
            long sum = 0;
            while(k<=n-1){
                sum = sum+(long)Math.pow((double)k,(double)n-1);
                k++;
            }
            if(sum%n==n-1){
                System.out.println(n + " is a prime.");
            }
            n++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,由于变量sum快速增长,发生溢出,在素数17之后将不再有输出.

为了防止我必须使用这个:

在此输入图像描述

好吧,我做到了,这是我的2.版本:

public class Giuga {

    public static void main(String[] args){
        int n = 2;

        while(n<=1000){
            int k = 1;
            long sum = 0;
            while(k<=n-1){
                sum = sum+((long)Math.pow((double)k%n,(double)n-1))%n; //Here are the changes
                k++;
            }
            if(sum%n==n-1){ …
Run Code Online (Sandbox Code Playgroud)

java algorithm primes

9
推荐指数
1
解决办法
654
查看次数

C 中指针变量的类型冲突(错误)

(1)

#include <stdio.h>
#include <stdlib.h>

int a = 10, b = 20 , c = 30, d, e, *pa, *pb, *pc;

d= 10;
e= 100;

pa = &a;
pb = &b;

int main()
{
    printf("%i, %i, %i, %i", pa, pb, d, e);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(2)

#include <stdio.h>
#include <stdlib.h>

int a = 10, b = 20 , c = 30, d, e, *pa, *pb, *pc;

d= 10;
e= 100;

int main()
{
    pa = &a;
    pb = &b;

    printf("%i, …
Run Code Online (Sandbox Code Playgroud)

c variables pointers compiler-errors

3
推荐指数
1
解决办法
3805
查看次数

标签 统计

algorithm ×1

c ×1

compiler-errors ×1

java ×1

pointers ×1

primes ×1

variables ×1