修改
我想得到自然数N的除数。
for (int i=1;i<n/2;i++)
if(n%i==0)
print(i);
我们如何比较数字小于n / 2? 我想在不到n / 2步中找到所有因素
答案 0 :(得分:1)
如果我理解正确,您想确定i
是否小于n/2
?
试试这个:
if (i < n/2)
print(i);
答案 1 :(得分:1)
您实际上可以在sqrt(n)
步骤中执行此操作,如下所示:
for(int i = 1;i <= sqrt(n);i++)
{
if(n % i == 0)
{
print(i);
if(i != sqrt(n))
print(n / i);
}
}
这将打印n
的每个除数一次。请注意,与示例代码一样,我假设print
函数可以按如下方式实现:
void print(int i)
{
printf("%d\n", i);
}
答案 2 :(得分:0)
两个
for(int i=1;i<n;i++)
和
for(int i=1;i<n/2;i++)
有效但第二种效率更高。一个数字的除数不会超过它的一半。 例如,100的因子肯定会小于等于50。
there还有许多其他有效的算法。
答案 3 :(得分:0)
尝试:
for(int i=1; i < (n/2); ++i)
if (n%i==0)
printf("%d\n",i);
这个优化怎么样(你只需要平方根):
for(int i=1; i < sqrt(n); ++i)
if (n%i==0)
printf("%d\n",i);
或者这个,你只覆盖奇数(如果检查素数就很有用):
for(int i=1; i < sqrt(n); i+=2)
if (n%i==0)
printf("%d\n",i);
答案 4 :(得分:0)
如果我理解正确,你正在寻找N号的所有除数?
试试这个:
for(int i=1;i<n/2;i++)
{
if(n%i == 0)
printf("%d\n",i);
}
答案 5 :(得分:-1)
如何首先进行除法并存储在变量中,以便在FOR循环的每次迭代中不计算它:
int num = Convert.ToInt32(n/2);
for (int i = 1 ; i < num; i++)