合数所有正因子相加

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;
}
    

 

posted @ 2018-12-22 15:56  jsdhwdmaY  阅读(476)  评论(0)    收藏  举报