나는 수학 프로그래밍에 결코 정말로 괴롭지 못했지만, 오늘은 그걸 한 번 줄 것을 결정했다.번호의 요인을 찾는 데이 코드를 최적화하도록 도와 줄 수 있습니까? 나는 수학 프로그래밍에 솔직 해지고있다.
여기 내 코드 그리고 그것은 의도 한대로 작동하고 : 내 코드를 볼 수 있습니다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace PrimeFactorization
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
List<int> primeFactors = FindPrimeFactors(Convert.ToInt32(txtNumber.Text));
primeFactors.Sort();
for (int i = 0; i < primeFactors.Count; i++)
{
listBoxFoundNumbers.Items.Add(primeFactors[i]);
}
}
private List<int> FindPrimeFactors(int number)
{
List<int> factors = new List<int>();
factors.Add(1);
factors.Add(number);
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
int holder = number/i;
//If the number is in the list, don't add it again.
if (!factors.Contains(i))
{
factors.Add(i);
}
//If the number is in the list, don't add it again.
if (!factors.Contains(holder))
{
factors.Add(holder);
}
}
}
return factors;
}
}
}
유일한 문제는 확실히 어떤 요인이되지 않더라도, 쓴 끝까지 반복 것입니다.
예를 들어, 내가 35 번에 쓴다고 상상해보십시오. 내 루프가 35 위로 올라가서 24,25,26,27 ... 등을 확인합니다. 아주 좋은하지.
무엇이 좋습니다?
우선 sqrt (number) +1까지 반복해야합니다. – tur1ng
어떻게 그렇게됩니까? 그게 수학의 진실인가요? 나는 수학 프로그래밍과 지옥에 정말 새로운 것을 기억한다. 수학 규칙도 마찬가지다. –
이것은 더 복잡한 솔루션에 대한 부분적인 대답이지만, sqrt (n)로 그의 상한선을 변경하면 잘못된 결과를 얻게됩니다. – danben