Math 在素因式分解的一部分中需要一个证明

Math 在素因式分解的一部分中需要一个证明,math,proof,prime-factoring,number-theory,Math,Proof,Prime Factoring,Number Theory,根据topcoder的说法,我们需要计算到数字的平方根,以列出它的所有素数因子。。。现在,我能够在下面的代码中证明,在进入for循环之前,我们一直在做正确的事情。。但我无法理解为什么剩余的数字会是素数,也就是说,在我们退出循环之后,如果(n>1)printf(“%d”,n);是什么让我烦恼。。!你能给我一个正式的证明和例子吗 void factor(int n) { int i; for(i=2;i<=(int)sqrt(n);i++) { whi

根据topcoder的说法,我们需要计算到数字的平方根,以列出它的所有素数因子。。。现在,我能够在下面的代码中证明,在进入for循环之前,我们一直在做正确的事情。。但我无法理解为什么剩余的数字会是素数,也就是说,在我们退出循环之后,如果(n>1)printf(“%d”,n);是什么让我烦恼。。!你能给我一个正式的证明和例子吗

 void factor(int n) 
 { 
   int i; 
   for(i=2;i<=(int)sqrt(n);i++) 
   { 
     while(n % i == 0) 
     { 
       printf("%d ",i); 
       n /= i; 
     } 
   } 
   if (n > 1) printf("%d",n); 
   printf("\n"); 
 } 
空隙系数(int n)
{ 
int i;
对于(i=2;i 1)printf(“%d”,n);
printf(“\n”);
} 

粗略地说,对于
n
的每个因子
i
,都有一个辅助因子
i'
,使得
i*i'=n
,即
n/i
。在不丧失一般性的情况下,假设
i=min{i,i'}
。然后
i最初,该过程继续搜索小于其平方根的
n
最小因子。 如果没有,则
n
为素数。所以打印出
n
,因为它是一个最小的素数因子

如果你找到一个最小的因子,那么它一定是素数。如果不是,它是复合的,有一个较小的主要因素-矛盾

找到最小的素数因子n除以该因子以消除它(记住可能是
n==i*i*i*…i*r
,其中i是素数因子,r是余数)。这就是
while(n%i==0)
循环中发生的情况

最后,我们有
n
持有剩余物。 现在我们需要r的最小素因子。 我们知道最小的素因子是i。为什么?因为如果r的素因子比i小,那么i不是n的最小素因子

因此,我们可以通过r的试分来搜索i+1到sqrt(r),从而找到n的次最小素因子。 如果我们没有找到,并且r>1,那么r是最后一个素因子

进行入职培训


在每一轮消除之后(进入
而(n%i==0)
循环),我们有一个我们知道没有素数因子的数字,期望的输出是什么?如果
n
是素数,否则为空,那么输出应该是
n
吗?所有的素数因素我投票结束这个问题,因为它是关于数学证明的,而不是关于编程的。这就是为什么我在这里问这个问题,因为人们可能在任何地方都不理解我的疑问else@Joe这是与其说是数学证明,不如说是编程。如果仅仅是关于数学证明,即使有一个素数因子大于这个数的平方根,我们也会循环直到
iSo。。这种方法会错过它吗??我认为最后一个if声明只针对这个案例。。。我猜topcoder的人不会错的…我想这会打印出一个素数!!