合数所有正因子相加
1.合数
如果N是合数,则它有一个因子d满足1<d≤√N”。(《基础数论》13页,U杜德利著,上海科技出版社)
另一个因子为N/d;
(有效减少遍历次数)
2.
所有因子和相加
例题(1):https://vjudge.net/problem/22310/origin
代码
#include<stdio.h> #include<math.h> int main() { int n,m; int i,sum; scanf("%d",&n); while(n--) { sum=1; scanf("%d",&m); for(i=2;i<=sqrt(m);i++) { if(m%i==0) { if(i!=m/i) { sum+=i+m/i; } else sum+=i; } } printf("%d\n",sum); } return 0; }
例题(2):https://vjudge.net/problem/36674/origin
代码
#include<stdio.h> #include<math.h> int main() { int n; int num1,num2; int i,j,t; int sum,count; scanf("%d",&n); while(n--) { count=0; scanf("%d%d",&num1,&num2); if(num1>num2) { t=num1; num1=num2; num2=t; } for(i=num1;i<=num2;i++) { sum=1; for(j=2;j<=sqrt(i);j++) { if(i%j==0) { if(j!=i/j) sum+=j+i/j; //相同原理 else sum+=j; } } if(sum==i) count++; } printf("%d\n",count); } return 0; }

浙公网安备 33010602011771号