Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#,求一个数的最大素因子_C# - Fatal编程技术网

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

我是编程新手,我正在练习我的C#编程技能。我的应用程序旨在查找用户输入的数字的最大素数因子。但是我的申请没有返回正确答案,我也不知道问题出在哪里。你能帮帮我吗

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