为什么这段代码返回一个数字的因子之和?
在几个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;
可能重复:
我正在尝试用c#编写一些代码,这些代码将给我第n个素数,但是一旦我的代码作为素数超过121,它就会返回不正确的数字。
这可能是因为我的代码基于错误的算法,但我想在这里询问一下,看看我是否做错了什么。
代码要求n个素数10001 -输出: 43751 (我知道这是错误的)。
这是我的密码。
int[] p;
int x = 0;
p = new int[10002];
for (int i = 0; i < 1000000; i++)
if (i % 2 != 0)
{
if (i % 3 != 0)
{
if (i % 5 != 0)
实际上,我已经编写了我的第n项函数,它接受n并编译列表“素数”中的所有素数,并返回索引的位置- -1的素数是10001素数:如果有人可以改进我的代码或为这个问题编写更好的代码,请允许我这样做。
def nthprime(n):
primes = [2]
attempt = 3
while len(primes) < n: # it runs until the len of primes is greater or equal to n
if all(attempt % prime != 0 for prime in primes):
我试图从Euler项目中解决一个问题: 13195的素因子是5,7,13和29。数字600851475143中最大的素因子是什么?以下是我的尝试:
def getPrimeNumbers(testNumber):
'''
For a given number it returns a list of all prime numbers from 2 to given number.
>>> getPrimeNumbers(15)
[2,3,5,7,11,13]
'''
这里x,y<=10^12和y-x<=10^6
我从左到右循环,检查每个数字,因为当x和y有点像10^11时,prime..this方法非常慢,而10^12..any更快一些吗?我将所有素数存储到10^6..can,然后使用它们在10^10-10^12这样的巨大值之间查找素数?
for(i=x;i<=y;i++)
{
num=i;
if(check(num))
{
res++;
}
}
我的检查功能
int check(long long int num)
{
long long int i;
if(num<
这是我的代码:
def findPrimes():
prime=True
c=0
n=1
while n<14:
n=n+1
for i in range(1,n):
if n%i==0:
prime=False
if prime==True:
print(n)
while c==0:
n=n+1
if (n%2==0) or (n%3==0) or (n%5==0)or (n%7==0)or (n%
public class prime
{
public static void main(String[] args)
{
long thing = 600851475143L;
for(long i = 300425737571L ; i == 0 ; i-- ){
if (thing % i == 0)
{
long answer = i;
System.out.println(answer);
break;
}
}
}
}
这是我目前拥有的代码,但是我已经在Dr
我知道如何使用while循环实现这一点,但我需要找出使用for循环的解决方案。对于给定的num = 56,我下面的代码输出[2, 7, 4],而正确的答案应该是[2,2,2,7]。我哪里错了?
def prime_fac(num):
a = num
pf = []
for x in range(2,a):
if a % x == 0:
if x == 2 or x == 3:
pf.append(x)
a = a//x
else:
我必须得到一个素数序列。但是我的代码不能工作。怎么可能修复它呢?
var num1 = parseInt(prompt('Enter a number'));
var num2 = parseInt(prompt('Enter a number'));
var num3 = 0;
function primeSeq(num1, num2) {
var b = 1;
var c = '';
if (num1 > num2) {
num3 = num2;
num2 = num1;
num1 = num3;
}
for (va
我编写了以下函数,它查找给定自然数的所有除数,并将它们作为列表返回:
def FindAllDivisors(x):
divList = []
y = 1
while y <= math.sqrt(x):
if x % y == 0:
divList.append(y)
divList.append(int(x / y))
y += 1
return divList
它的工作非常好,只有当输入是一个18位数的数字时,它是非常慢的。你对我如何加快速度有什么建议吗?
更新
基于Fe
我不明白为什么这个不起作用。请帮帮我
from math import sqrt
pN = 0
numPrimes = 0
num = 1
def checkPrime(x):
'''Check\'s whether a number is a prime or not'''
prime = True
if(x==2):
prime = True
elif(x%2==0):
prime=False
else:
root=int(sqrt(x))
for i
我在想一个算法来解决与p素数的同余ax = 1 mod p。我在考虑用费马定理。因为我知道
a ^ (p-1) = 1 mod p
那就是
a ^ (p-1) = a * (a ^ (p-2))
这意味着a ^ (p-2) mod p是解决方案。不幸的是,这个解决方案,虽然在数学上是正确的,但对计算机来说并不好,因为对于大素数,我必须做a ^ (p-2),这通常是不可计算的。
哪种算法对计算机科学有好处?
我是C#的初学者,我正在尝试编写一个应用程序来获取用户输入的两个数字之间的素数。问题是:对于较大的数字(有效数字在1到1000000000之间),获得素数需要很长时间,并且根据我正在解决的问题,整个操作必须在很小的时间间隔内执行。这是有关更多说明的问题链接:
下面是我的代码中负责获取质数的部分:
public void GetPrime()
{
int L1 = int.Parse(Limits[0]);
int L2 = int.Parse(Limits[1]);
if (L1 == 1)
我正在研究Euler项目,问题3。问题是:
13195的素数是5,7,13和29。600851475143的最大素数是什么?
在回答这个问题时,我把任务分解为首先找到所有素数<x(反向)。为什么下面的代码似乎不工作,我不确定是逻辑或不正确的使用运算符。
#A function to find prime numbers under n
def find_prime(n):
for i in reversed(xrange(2, n)):
if (n % i) != 0:
print i
find_prime(n)
在测试中,为了好
受寻找最大的脆弱素数启发
循环素数(或您选择将其称为素数)是一个素数,当移除前导数字时,无论移除多少位数,它始终保持素数。
for example
6317 is a recurring prime because...
317 is a recurring prime because...
17 is a recurring prime because...
7 is a prime
727是素数,但不是循环素数,因为27不是素数。
目标
和最初的问题一样,你的分数是你的程序/算法所发现的最大的重复质数。
规则
我抄袭了原来的问题
You may use any language and
我被问到了这个问题。
n = 77
n = p*q
p and q is a prime number
用蛮力制作p和q的查找器。
到目前为止我的代码是:
public class If {
public static void main(String[] args) {
int p = 3, q = 3;
int n = 77;
int temp = p*q;
boolean flagp, flagq = false;
while (temp != n && p <= 77)
我是一个Java新手,我的作业是编写一个程序,让用户输入一个数字,然后程序检查这个数字是否为质数。
我必须使用任何循环和JOptionPane作为输入。
我已经设法写了这段代码,并且它可以工作:
import static javax.swing.JOptionPane.*;
public class Programmeringsoppgave5 {
public static void main(String[] args) {
int number = 0;
String readNumber = showInputDialog("Wri
我试图找出任何数字中最大的素因子。我正在用python做这个问题的程序,但是我所遵循的算法似乎有问题。它似乎进入了一个无限的循环。这个程序是这样的:
def prime(n):
i=0;
while(n!=2):
for i in range(2,n):
if(n%i==0):
prime(n/i);
else:
continue;
print("The highest prime factor is: "),n;
print("Enter a number to
我写这段代码是为了检查hackerrank上的no是不是smith no。Smith数是一个复合数,其数字之和是通过素数分解(不包括)得到的素数因数的位数之和。头几个这样的数字是4,22,27。此代码运行良好,但在输入= 2050918644时出现超时错误。现在,您可以告诉我如何编辑这段代码并确保它不会给我带来超时错误吗
import java.io.*;
import java.util.*;
public class Solution {
static int sumD(int a){
int sum=0;
while(a>0)
{
我是通过对每个值( k=3 )使用这个函数从n到n(给定的上值)进行检查的。我如何优化它以获得数组中的所有素数直到n,而不需要检查每个数字k
int primeCheck(long long int k) {
int j;
int isPrime = 1;
int sr = (int)sqrt(k);
for (j = 2; j <= sr; j++) {
if (k % j == 0) {
//printf("=========== %d|%d\n", num,num2); // uncomment