为什么这段代码返回一个数字的因子之和?
在几个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;
(这个问题指的是代码强制问题),我想知道是否有任何n (2 ≤ n ≤ 10¹⁴)有奇数除数。使用C++11,我认为通过迭代每一个奇数直到n,然后用%检查它是否是可除的,这是可能的。诸如:
for(unsigned long long i=3;i<n;i+=2){
if(n%i==0) return true; //It has an odd divisor
}
return false; //n%j==0 was never true so it doesn't have an odd divisor
当然,如果给出一个很大的数字,结果是非常缓慢的。我发现人们正在通过位移
我能够用这种方式为素数编写一个函数。
def isprime(num):
if num > 1:
for i in range(2, num):
if num % i == 0:
return False
return True
%timeit [i for i in range(1000) if isprime(i)]
7.94 ms ± 273 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
然后我发现用平方根写这个有一种
这个程序计算了所有的因数。首先找到所有的素数因子,并将它们的指数加1,然后将它们彼此相乘。但是在for循环中,i在每次迭代中都会递增2,这是不是错了,因为在7之后,它会递增到9,而这不是质数?还是我错了?有谁能解释一下!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
cin>>n;
int factors=1,exponen=0;//exponent stores power of current prime
while(n%2==0)//a se
我试图创建一个函数,该函数返回给定数字的最小素数:
require 'prime'
def findSmallestPrimeFactor(number)
return 2 if number.even?
return number if Prime.prime? number
arrayOfFactors = (1..number).collect { |n| n if number % n == 0 }.compact
arrayOfFactors.each { |n| arrayOfFactors.pop(n) unless Prime.prime? n
我不知道如何使用素数分解来找到LCM。我设法找到了这两个数字的质数因子,并将它们放入数组中,但我不知道如何选择它们中的哪一个应该用于计算LCM。
int lcm(int a, int b)
{
int arrA[100], arrB[100], x, y, z;
x=2;
y=0;
while(a>1)
{
while(a%x==0)
{
a=a/x;
arrA[y]=x;
cout<<arrA[y]<<endl;
y++;
}
x++;
}
x=2;
z=0;
我是一个Java新手,我的作业是编写一个程序,让用户输入一个数字,然后程序检查这个数字是否为质数。
我必须使用任何循环和JOptionPane作为输入。
我已经设法写了这段代码,并且它可以工作:
import static javax.swing.JOptionPane.*;
public class Programmeringsoppgave5 {
public static void main(String[] args) {
int number = 0;
String readNumber = showInputDialog("Wri
我正在写这个方法,它应该返回给定数字的最大素因数。它一直工作得很好,直到输入了45,输出是15,尽管输出应该是5。我正在努力寻找错误。请帮帮忙。
public static int getLargestPrime(int number) {
if (number < 0) {
return -1;
}
for (int i = number-1; i > 1; i--) {
if (number % i == 0) {
for (int j = 2;
我用C++创建了它,这给出了number.But最大的素数因子,我的问题是,如果我试图找到一个很大的数字的最大素数(12位数),它会给出一个错误,或者它没有给出答案。我刚开始编程,所以请帮忙:)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int number;
cout << " Enter the number \t " ;
cin >> number;
for( int counter = numb
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
我需要找到用户输入的数字的主要因素。
示例:
输入一个号码: 1430。1430的素数是2,5,11,13。
我宁愿不使用函数,因为我还没有讨论它
这是我的密码
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std ;
int main ()
{
int count, i , i2 ;
int userInput, prime ;
bool flag = false ;
cout << "Ent
我有一个复制因子为2的keyspace,我使用的是单实例集群。
我试图用“如果不存在”选项将值插入到该键空间中的一个表中,但得到了一个错误。
在不使用"if not exists“的情况下使用时,将创建行。
来自cli:
insert into domains (domain, time) values ('test.com', 10) if not exists;
我得到了: NoHostAvailable:
从java客户端运行会产生以下错误:
at org.apache.kafka.streams.processor.internals.StreamThread.
我和unordered_set一起工作。它有一个reserve函数,可以根据N要包含的元素的数量设置存储桶。然而,Ubuntu上的mpic++编译器抱怨说没有保留函数:class std::tr1::unordered_set<pair_int>’ has no member named ‘reserve’
我需要优化我的集合来容纳N元素,似乎max_load_factor是可用的,我怎么来一个基于N的?或者我可以以其他方式对其进行优化?
提前感谢
p/s/我看到了一些关于java的讨论,但没有关于c++ stl库的讨论
def prime(x):
for a in range(2, x):
if x%a == 0:
break
else:
return x
num = 0
largest = 0
for i in range(2, 600851475143):
if 600851475143%i == 0:
num = prime(i)
if largest < num:
largest = num
print(largest) 我得到了答案,但它没有成功运行,我得到了这
我正在研究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)
在测试中,为了好
您可能已经猜到,我正在做euler #12项目的标题。我的蛮力解决方案花了很长时间,所以我去寻找我能理解的优化。
我对扩展概述的策略感兴趣
我试图解决这个问题的方法是使用Eratosthenes的筛子来获得这样的主要因素:
divs = []
multiples = set()
for i in xrange(2, n + 1):
if i not in multiples:
if n % i == 0:
divs.append(i)
multiples.update(xrange(2*i, n+1, i))
return di
我需要找到一个正整数的最大除数并输出它。除数不应为1或等于整数本身。如果是质数,则输出应为"0“。到目前为止,我已经有了这个代码。然而,它并不起作用。它只在我使用" break“而不是"return 0”语句时有效,但根据任务,我不应该使用break :(我如何修复它?Thnx
#include <stdio.h>
int main() {
int input, maxDiv;
int div = 2;
scanf("%d", &input);
for ( ; div <= input/2;