저는 C#의 초보자입니다.n까지의 정수를 모두 분해 할 수없는 이유는 무엇입니까?
n
의 소수 분해를 계산하는 프로그램을 만들려고했습니다. 그리고 효과가있었습니다. 여기있다 :
Console.WriteLine("Write a number.");
int n = int.Parse(Console.ReadLine());
bool[] p = new bool[(int)Math.Floor(Math.Sqrt(n))+2];
for(int i=2; i<p.Length; i++)
{
p[i]=true;
}
for(int i=2; i<=Math.Sqrt(p.Length); i++)
{
if(p[i])
{
for(int j=i*i; j<p.Length; j+=i)
{
p[j]=false;
}
}
}
int[] P = new int[p.Length];
int k=0;
for(int i=2; i<p.Length; i++)
{
if(p[i])
{
P[k]=i;
k++;
}
}
Array.Resize(ref P, k);
int N=n;
for(int i=0; i<P.Length; i++)
{
if(n%P[i]==0)
{
int j=1;
while(n%Math.Pow(P[i],j+1)==0)
{
j++;
}
if(n!=N)
{
Console.Write(" . ");
}
Console.Write(""+P[i]+"^"+j);
n/=(int)Math.Pow(P[i],j);
}
}
if(n!=1 && n!=N)
{
Console.Write(" . "+n+"^1");
}
if(n==N)
{
Console.Write(""+n+"^1");
}
Console.ReadKey(true);
가 그럼 난
n
까지
모든 정수의 소인수 분해를 계산하는 프로그램을 만들기 위해 노력했다. 그러나 그것은 효과가 없습니다. 여기있다 : 나는이 프로그램을 실행하면
Console.WriteLine("Write a number.");
int n = int.Parse(Console.ReadLine());
bool[] p = new bool[(int)Math.Floor(Math.Sqrt(n))+2];
for(int i=2; i<p.Length; i++)
{
p[i]=true;
}
for(int i=2; i<=Math.Sqrt(p.Length); i++)
{
if(p[i])
{
for(int j=i*i; j<p.Length; j+=i)
{
p[j]=false;
}
}
}
int[] P = new int[p.Length];
int k=0;
for(int i=2; i<p.Length; i++)
{
if(p[i])
{
P[k]=i;
k++;
}
}
Array.Resize(ref P, k);
for(int m=2; m<=n; m++)
{
int M=m;
for(int i=0; i<P.Length; i++)
{
if(m%P[i]==0)
{
int j=1;
while(m%Math.Pow(P[i],j+1)==0)
{
j++;
}
if(m!=M)
{
Console.Write(" . ");
}
Console.Write(""+P[i]+"^"+j);
m/=(int)Math.Pow(P[i],j);
}
}
if(m!=1 && m!=M)
{
Console.Write(" . "+m+"^1");
}
if(m==M)
{
Console.Write(""+m+"^1");
}
Console.WriteLine("");
}
Console.ReadKey(true);
그냥 표시
2^1
2^1
2^1
2^1
...
어떤 오류가 있습니까? 두 번째 프로그램을 만들 때 방금 첫 번째 프로그램을 사용했기 때문에 이상합니다. 두 번째 프로그램이 작동하지 않을 이유가 없습니다 ...
그리고 두 번째 교훈은 귀하의 변수 이름입니다. P, J, 나는 이해하기 어렵다. –
그리고 세 번째 교훈은 코드를 메소드에 넣는 것입니다. 첫 번째 프로그램이 이미'N '을 입력하는 메서드를 갖고 있다면 두 번째 프로그램은 첫 번째 프로그램의 메서드를 호출하는 단순히 for 루프입니다. 첫 번째 프로그램이 작동하는 한 일할 수 없었습니다. (좋아, 나는 약간 과장된 ... 프로그래밍 언어는 전혀 바보가 아니다 ...하지만 초보 프로그래머조차도 깨뜨릴 수있다.) –
@BillGregg "이해하기 힘듭니다"- 설명 (문서)없이. –