C语言问题。因子和。给一个正整数n,请求n所有因子的累加和

Description
题目描述
给一个正整数n,请求n所有因子的累加和。
输入
每行一个整数n,1≤n≤100,000,000。如果n为0表示输入结束,不需要处理。
输出每行输出一个结果。
样例输入
1
2
3
4
0
样例输出
1
3
4
7
在学校网站上做的题目,初学C语言,菜的很,不懂什么算法,求各位高手指点下我,不胜感激。以下是我的代码,提交到学校网站上去提示Time Limit Exceed
#include <stdio.h>//1172.因子和
int main()
{ long n;
int i, sum;
while(scanf("%d", &n)&&n!=0)
{
sum = 0;
if(n==1){printf("1\n");continue;}
else
{
for(i=1;i<n/2+1;i++)
if(n%i==0)sum=sum+i;
printf("%d\n", sum+n);
}
}
return 0;
}

第1个回答  2017-06-09
main()
{
long sum, n, i;
for(;;) // forever
{
scanf("%d",&n);
if(n == 0) break;
sum = 1 + n; // this is the sum of two factors
i = 2;
while (n > 1)
{
if(n%i == 0) {
sum += i;
n /= i;
} else {
i++;
}
}
printf("%d\n",sum);
}
}
for example
input 40
sum = 1+40
the loop goes as follows:
i = 2, sum = 43, n = 20
i = 2; sum = 45, n = 10
i = 2; sum = 47; n = 5
i = 5; sum = 52; n = 1
end
第2个回答  推荐于2017-06-09
if(n==1){printf("1\n");continue;}
else
多余。可去掉。直接保留else分支的内容。

for(i=1;i<n/2+1;i++) n/2可以用n的平方根进一步缩小循环次数本回答被网友采纳
第3个回答  2014-10-09

时间超时了  说明算法需要优化 试试这个  看能不能AC

#include <stdio.h>//1172.因子和
#include <math.h>
int main()
{    long n;    
     int i, sum;    
     while(scanf("%d", &n)&&n!=0)    
   {        
     sum = 0;        
     if(n==1){printf("1\n");continue;}        
     else        
   {        
    for(i=1;i<sqrt(n);i++)  {
     if(n%i==0)sum=sum+i,sum+=n/i;  
}             
        int j=sqrt(n);
if(n==j*j) sum+=j;           
    printf("%d\n", sum);        
     }    
    }   
  return 0;
}

追问

还是超时了。。。是不是换个思路,用其他的算法实现呢

追答

改后最坏情况下也就for了10000 应该不会超时的啊 你把题目网址发过来 我瞧瞧

追问

http://202.197.224.59/exam/index.php/problem/read/id/1172

追答

Sorry! Register Closed! [ Return ]
。。。爱莫能助。。

本回答被网友采纳
第4个回答  2014-10-09
运行时间限制,程序的执行时间超过了规定的时间限制
第5个回答  2023-03-10
一个可能的C语言程序来计算一个正整数n的所有因子的累加和是:
#include <stdio.h>int main(){ int n, i, sum = 0; printf("Enter a positive integer: "); scanf("%d", &n); for (i = 1; i <= n; i++)
{ if (n % i == 0) // if i is a factor of n
{
sum += i; // add i to the sum
}
} printf("Sum of factors = %d\n", sum); return 0;
}

\/* 计算正整数n所有因子(1和n除外)之和。(用C语言编程)
void main(){ int n;int s=0;printf("请输入一个正整数:");scanf("%d",&n);printf("该整数除1和其本身的因子为:\\n");for(int i=2;i<=n\/2;i++){ if(n%i==0){ printf("%d\\t",i);s=s+i;} } printf("\\n%s%d\\n","所有因子之和为:",s);} ...

c语言 输入一个正整数n,输出n的所有因子
当您需要在C语言中编写程序来找出一个正整数n的所有因子时,首先需要定义一些整型变量,以便进行运算。程序的流程如下:步骤1:初始化两个整数变量n和m,确保它们都是大于2的正整数,作为输入。步骤2:设置一个临时变量t,其值为m,同时定义一个变量i,初值设为2,用于遍历可能的因子。接下来,使用do...

c语言 输入一个正整数n,输出n的所有因子
5、用i对整数m求余,保存在变量r中。6、判断i是否m的质因子,如果是则继续判断是否n的质因子,如果不是n的质因子,则退出循环。7、如果i不是质因子,则自加1,继续判断。8、运行程序,输入两个大于2的正整数后,计算机就会判断整数n是否包含m的所有质数因子,并输出结果。

用C语言:计算并输出给定整数N的所有因子(不包括1与自身)之和
思路:输入一个数n,接着for循环从2到n-1依次整除n,如果能被整除则累加,最后输出累加和。参考代码:include<stdio.h>int main(){ int n,i,sum=0; scanf("%d",&n); for(i=2;i<n;i++) if(n%i==0) sum+=i; printf("累加和为:%d\\n",sum); return 0;}...

C语言:编写函数,计算出形参n的所有因子之和(包括1与自身)?
程序的执行效率非常高(瞬间就完成):include "stdio.h"int fun(int n){int i,s=n+1;for(i=2;i*i<n;i++)if(n%i==0)s+=i+n\/i;if(i*i==n)s+=i;return s;} main(){ int k;scanf("%d",&k);printf("%d\\n",fun(k));} ...

如何用C语言计算因子之和?
在C语言中,你可以通过编写一个简单的程序来接收用户输入的数,并计算其因子之和。以下是一个示例代码:这个程序首先提示用户输入一个正整数。然后,它使用一个for循环从1到用户输入的数字,检查每个数是否是输入数字的因子(如果输入的数可以被这个数整除,那么这个数就是因子)。如果是因子,就把它加...

c语言:计算正整数n的所有质因子之和作为函数值返回,并输出该值
include "stdio.h"main(){ int add();int n,sum;scanf("%d",&n);sum=add(n);printf("%d",sum);} int add(int p){ int i,sum1=0;for(i=2;i

c语言 输入一个正整数n,输出n的所有因子
把if(x=0)改成 if (x == 0)这种错误初学者经常会犯,老手也不能避免,一个偏方是写这种语句时把数值放在前面,比如写成 if (0 == x)这样如果你漏了个等号,写成了 if (0 = x),编译时编译器会报错

急!c语言 求一个数所有的因子加起来得到的和.
题目中未确定因子不包括数字T本身。include<stdio.h>int main(){int T;scanf("%d",&T);int c[T],i,a,N=0;for(i=1;i<=T;i++)scanf("%d",&c[i]);for(i=1;i<=T;i++){for(a=1;a<=c[i]\/2;a++)if(c[i]%a==0)N+=a;printf("%d\\n",N);N=0;}return 0;} ...

C语言:输入一个正整数, 计算并显示出该数的各位数字之和.
int i;int sum=0;if(n>1000||n<0){ puts("输入的数字超出范围!"); \/\/ 错误信息提示 } else { for(i=2;i<n;i++) \/\/ 循环遍历n,取出因子,并进行累加 { if(0 == n%i){ sum+=i;} } } return sum;} void main(){ int n,sum;printf("Input n: ");scanf("%d",&n)...

相似回答