Problem 10 of Find the sum of all the primes below two million.

本文介绍了一个Java程序,该程序用于计算200万以下所有素数的总和。通过实现一个高效的isPrime方法来判断素数,并使用循环进行累加求和,最终得出答案为142,913,828,922。

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

public class BigPrime {
	public static void main(String args[]){
		long j=0;
		for(long i=2;i<2000000;i++){
			if(isPrime(i)){
				j+=i;
			}
		}
		System.out.println(j);
	}
	
	public static boolean isPrime(long n){
	    for(int i = 2; i * i <= n; i++){
	  if(n % i == 0)
	   return false;
	  }
	    return true;
	}
}

Answer:
142913828922

为了解决这个问题,我们需要分步骤处理以下子问题: 1. **生成从2到100的所有非完全平方整数n**:这意味着需要遍历2到100之间的所有整数,并排除那些是完全平方数的整数(如4, 9, 16等)。 2. **计算每个n对应的f(n)**:对于每个非完全平方的n,需要计算满足条件的素数p(p ≤ 1000)的数量,其中n是模p的原根。 3. **原根的概念**:一个整数n对于模p来说是原根,当且仅当对于模p的乘法群,n的指数等于p-1(即n的最小正周期等于p-1)。 4. **确定素数p**:为了找到满足条件的素数p,需要生成所有小于等于1000的素数列表。 5. **检查n是否为模p的原根**:对于每个非完全平方的n和每个素数p,需要验证n是否为模p的原根。这可以通过计算n的阶是否等于p-1来完成。 6. **求和**:最后,将所有非完全平方整数n对应的f(n)相加,得到最终结果。 计算n的阶可以通过以下步骤: - 确定p-1的素因数分解。 - 对于每个因数d,计算n^((p-1)/d) mod p。 - 如果对于所有d ≠ 1,结果都不等于1,则n是模p的原根。 具体实施时,可以使用编程语言(如Python)来实现算法,例如使用sympy库来生成素数和进行模幂运算。 ```python from sympy import isprime, primerange, factorint def is_primitive_root(n, p): if n == 0 or p == 1: return False if n == 1: return False factors = factorint(p-1) for factor in factors: if pow(n, (p-1)//factor, p) == 1: return False return True def count_primitive_roots(n, max_p): count = 0 primes = primerange(2, max_p+1) for p in primes: if is_primitive_root(n, p): count += 1 return count non_square_numbers = [i for i in range(2, 101) if int(i**0.5)**2 != i] result_sum = 0 for n in non_square_numbers: result_sum += count_primitive_roots(n, 1000) print(result_sum) ``` 以上代码片段提供了一个计算从2到100的所有非完全平方整数n对应的f(n)之和的框架。通过运行这段代码,可以得到所需的答案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值