C#,求一个数的最大素因子
我是编程新手,我正在练习我的C#编程技能。我的应用程序旨在查找用户输入的数字的最大素数因子。但是我的申请没有返回正确答案,我也不知道问题出在哪里。你能帮帮我吗C#,求一个数的最大素因子,c#,C#,我是编程新手,我正在练习我的C#编程技能。我的应用程序旨在查找用户输入的数字的最大素数因子。但是我的申请没有返回正确答案,我也不知道问题出在哪里。你能帮帮我吗 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(st
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Calcular máximo factor primo de n. De 60 es 5.");
Console.Write("Escriba un numero: ");
long num = Convert.ToInt64(Console.ReadLine());
long mfp = maxfactor(num);
Console.WriteLine("El maximo factor primo es: " + num);
Console.Read();
}
static private long maxfactor (long n)
{
long m=1 ;
bool en= false;
for (long k = n / 2; !en && k > 1; k--)
{
if (n % k == 0 && primo(k))
{
m = k;
en = true;
}
}
return m;
}
static private bool primo(long x)
{
bool sp = true;
for (long i = 2; i <= x / 2; i++)
{
if (x % i == 0)
sp = false;
}
return sp;
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
控制台写入线(“计算máximo因子primo de n.de 60 es 5”);
控制台。写(“描述一个数字:”);
long num=Convert.ToInt64(Console.ReadLine());
长mfp=最大因子(num);
控制台写入线(“El maximo factor primo es:+num”);
Console.Read();
}
静态专用长maxfactor(长n)
{
长m=1;
bool-en=false;
对于(长k=n/2;!en&&k>1;k--)
{
如果(n%k==0&&primo(k))
{
m=k;
en=真;
}
}
返回m;
}
静态私有布尔普里莫(长x)
{
bool sp=true;
对于(长i=2;i,有一个条件(!en),使得它只迭代到第一个素数因子。此外,还可以将边界从n/2减少到sqrt(n)+1
而不是
Console.WriteLine("El maximo factor primo es: " + num);
Catalin DICU已经回答了您的问题,但是您的代码中有一些非惯用的构造,您可能应该考虑重构。例如,在maxfactor
方法中,您不需要“en”条件,只要找到它就返回值:
static private long maxfactor (long n)
{
for (long k = n / 2; k > 1; k--)
{
if (n % k == 0 && primo(k))
{
return k;
}
}
// no factors found
return 1;
}
同样,对于primo
方法,只要找到一个因子,就可以返回false
。在余数为prime之前,删除小因子的速度会快得多
static private long maxfactor (long n)
{
long k = 2;
while (k * k <= n)
{
if (n % k == 0)
{
n /= k;
}
else
{
++k;
}
}
return n;
}
静态专用长maxfactor(长n)
{
长k=2;
而(k*k这里有一个f#版本:
let lpf n =
let rec loop n = function
|k when k*k >= n -> n
|k when n % k = 0I -> loop (n/k) k
|k -> loop n (k+1I)
loop n 2I
他只想让它找到最大的素因子,所以我想,en
条件应该是好的。你是这个人还是他们的同学?:一个人有一个以上的账户是不可取的。尝试Euler#3项目?我知道这是一篇老文章,但如果你还在,你能解释一下导致这个算法的概念吗请给我指出正确的方向,让我了解更多内容?@eric_s:您不清楚哪一部分?使用%
查找余数?使用余数识别因子?首先检查小因子的原因是什么?
let lpf n =
let rec loop n = function
|k when k*k >= n -> n
|k when n % k = 0I -> loop (n/k) k
|k -> loop n (k+1I)
loop n 2I