我编写了一个程序来确定输入的最大素因子。它工作得很好,除非有很大的数字。我尝试了"600000000000“,它没有打印任何东西,但它没有终止程序或打印错误。这个数字在很长的范围内,所以我不知道为什么它不工作。有什么想法吗?
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
long num = s.nextLong();
//terminated by 0
while(num!=0L){
System.out.println(lar
为什么这段代码返回一个数字的因子之和?
在几个Project Euler问题中,要求您计算因子和作为问题的一部分。在那里的一个论坛上,有人发布了以下Java代码作为求和的最佳方法,因为您实际上不必找到单个因子,只需找到质数(您不需要了解Java,您可以跳到下面的摘要):
public int sumOfDivisors(int n)
{
int prod=1;
for(int k=2;k*k<=n;k++){
int p=1;
while(n%k==0){
p=p*k+1;
n/=k;
因此,我基本上是一个编程新手,并且一直试图通过完成Project问题来学习Python。我还没走多远,这是我的问题3代码:
13195的素因子为5、7、13和29。数字600851475143中最大的素因子是什么?
虽然我的解决方案有效,但我想知道如何改进。
primes = [2]
factors = []
def isPrime(x):
a = 1
if x == 1:
return False
while a < x:
a += 1
if x % a == 0 and a != x and a != 1:
我对编程很陌生。我试着用程序打印第n个素数。守则如下:
##program to print the nth prime number
nreq=input("Enter a number ")
pctr=0 ##counter of the prime numbers
num=2
while pctr!=nreq:
ctr=0 ##counter
i=2
while i<=num:
if num%i==0:
ctr=ctr+1
i=i+1
if ctr==1:
我使用Qt和cpp计算一些耗时的计算,比如使用Eratosthene的筛子算法计算素数,如下所示。
QElapsedTimer timer;
timer.start();
int p;
for ( p = 2ull; p * p <= n; p++)
{
// If prime[p] is not changed,
// then it is a prime
qDebug() << p << "something
现在我已经生成了素数P,它是一个强素数,我怎么能生成一个原始根g呢?
我相信我会为g生成另一个bigInt,然后检查它是否是一个原始根。
这一代很容易,我可以做到这一点,就像我在第一代。
检查,以确保它是一个原始根,让我有点困惑。我需要确保g^q等于g^(( p -1)/2)与1 mod p不一致,是否有一个BigInteger函数来处理这个问题?
维基百科有欧拉理论。但是我不确定哪个是我的a,哪个是我的n,我可以用^phi(N)来表示这个论坛,对吗?
public void getKey() {
debug("Getting key (seed) from user"
我想使用Python制作Diffie密钥交换代码,但我害怕只是随机选择g。
我读到了托马斯·波宁( Thomas )对这个问题的回答,如何计算Diffie-Hellman的原始根?说,如果你使用一个强素数,那么这个群体中的每一个数字(除了1和p-1)都会有一个p-1或\frac{p-1}{2}的顺序,但我在网上找不到可以使用的大强素数列表。有人知道我在哪里能找到吗?
编辑:感谢fgrieu的慷慨帮助,我意识到我正在寻找安全的素数,而不是强素数。