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