鱼C论坛

 找回密码
 立即注册
楼主: 欧拉计划

题目6:平方和与和平方的差是多少?

[复制链接]
发表于 2017-9-11 17:17:10 | 显示全部楼层
  1. square,sumi = 0,0
  2. for i in range(1,101):
  3.     square += i*i
  4.     sumi += i
  5. print(sumi*sumi - square)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 15:48:35 | 显示全部楼层
#include <stdio.h>
#define N 100

long sum(int n)
{
        if (n%2)
        {
                return n/2*n+n;
        }
        else
        {
                return (n+1)*n/2;
        }
}

int main(void)
{
        long long suma=0;
        long long sumb;
       
        for( int i=1; i<=100; i++)
        {
                suma=suma+i*i;
        }
       
        sumb=sum(N)*sum(N);
       
        printf("%lld",sumb-suma);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 16:14:25 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<math.h>
  3. int SquareSum(int x)
  4. {
  5.         int i,y=0;
  6.         for(i=1;i<=x;i++)
  7.         {
  8.                 y=y+i*i;
  9.         }
  10.         return y;
  11. }
  12. int SumSquare(int x)
  13. {
  14.         int i,y=0;
  15.         for(i=1;i<=x;i++)
  16.         {
  17.                 y=y+i;
  18.         }
  19.         return y*y;
  20. }
  21. void main()
  22. {
  23.         int n=100;
  24.         printf("%d\n",abs(SquareSum(n)-SumSquare(n)));
  25. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 07:13:42 From FishC Mobile | 显示全部楼层
#计算平方和
def e2s(n):
    sum = 0
    for i in range(n+1):
        sum += i*i
    return sum
   
#计算和平方
def sume2(n):
    sum = 0
    for i in range(n + 1):
        sum += i
    return sum *sum

s = e2s(100) - sume2(100)
print("100个自然数的平方和与和平方的差是%d" % s )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 07:21:32 From FishC Mobile | 显示全部楼层
看完大神的代码 再优化下:
def square(n):
    sum1,sum2 = 0,0
    for i in range(n+1):
        sum1 += i*i
        sum2 += i
    return sum2*sum2 - sum1
print "100个自然数的平方和与和平方的差是%d" % square(100)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-17 16:45:09 | 显示全部楼层
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstdlib>
  4. #define N 100

  5. int main(int argc, char * argv[])
  6. {
  7.         long long int SumSquares = 0;
  8.         long long int SquaresSum = 0;
  9.         long long int temp;
  10.         temp = N * (N + 1) / 2;
  11.         SumSquares = temp * temp;
  12.         SquaresSum = N * (N + 1) * (2 * N + 1) / 6;
  13.         printf("value = %llu", abs(SumSquares - SquaresSum));

  14.         fputc('\n', stdout);
  15.         system("pause");
  16.         return 0;
  17. }
复制代码


结果为25164150
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-23 17:43:47 | 显示全部楼层
  1. print(sum(range(1,101))**2-sum([x**2 for x in range(1,101)]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 08:36:50 From FishC Mobile | 显示全部楼层
#include  <stdio.h>


int main (void)
{
   
    long i=0;
    int num=0;
    int sum;
    for(;i<=100;i++)
    {
        num=num+i*i;
        sum=sum+i;
    }
    int n=sum*sum;
    printf("%d",n-num);
    return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-12 13:17:18 | 显示全部楼层
  1. i = 1
  2. t = 0
  3. while i <= 100:
  4.     t += i**2
  5.     i += 1

  6. print((101*50)**2 - t)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-14 21:32:44 | 显示全部楼层
#第6题
#题目:
#前十个自然数的平方和是:
#1**2 + 2**2 + ... + 10**2 = 385
#前十个自然数的和的平方是:
#(1 + 2 + ... + 10)**2 = 552 = 3025
#所以平方和与和的平方的差是 3025 &#8722; 385 = 2640。
#找出前一百个自然数的平方和与和平方的差。
a=int(input('请输入求1~n平方和与和平方的差的数n:'))
#先求平方和
sum_of_square=0
for i1 in range(1,a+1):
    sum_of_square+=i1**2
#再求和的平方
square_of_sum=0
for i2 in range(1,a+1):
    square_of_sum+=i2
square_of_sum=square_of_sum**2
#最后结果
result=square_of_sum-sum_of_square
print('前{}个自然数的平方和与和平方的差是{}'.format(a,result))
看来离入门还差一步啊,别人都是一句就能完成的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-19 21:06:53 | 显示全部楼层
对于和的平方,用for循环是O(n),换个方法就是O(1),而计算平方的和就用了常规方法for循环计算,不过好像在求极限中有其他办法?总之本来复杂度是O(2n),修改了和的平方后就是O(n)了
#include<iostream>
using namespace std;
#define N 100
int main(){
        int sum1=0,sum2=0;
        //计算和的平方
        sum1=(N+1)*(N/2);
        sum1*=sum1;
        //计算平方的和
        for(int i=1;i<=N;i++){
                sum2+=i*i;
        }
        cout<<sum1-sum2;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-23 16:23:19 | 显示全部楼层
#include<stdio.h>
#include<math.h>
void main()
{
        long int n=100;
        long int sum=n*(n+1)/2;
        long int sum_square=sum*sum;
        long int square_sum=n*(n+1)*(2*n+1)/6;
        long int difference=sum_square-square_sum;
        printf("%d\n",difference);
}


25164150
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-14 16:51:58 | 显示全部楼层
  1. #include <stdio.h>
  2. main()
  3. {
  4.         int i,j,sum1,sum2,cha;
  5.         sum1=sum2=cha=0;

  6.         for(i=1;i<=100;i++)//求平方的和
  7.         {
  8.                 sum1=sum1+i*i;
  9.         }
  10.         for(i=1;i<=100;i++)//求和的平方
  11.         {
  12.                 sum2=sum2+i;
  13.         }
  14.         sum2=sum2*sum2;
  15.         cha=sum2-sum1;
  16.         printf("前一百个数的平方和为:%d\n前一百个数和的平方为:%d\n",sum1,sum2);
  17.         printf("他们的差为:%d",cha);
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-14 17:06:25 | 显示全部楼层
  1. #include <stdio.h>
  2. #include<math.h>
  3. int isprime(int x)//是素数则返回1,不是则返回0.
  4. {
  5.         int i;
  6.         for(i=2;i<=sqrt(x);i++)
  7.         {
  8.                 if(x%i==0)
  9.                 {
  10.                         return 0;
  11.                 }
  12.         }
  13.         return 1;
  14. }
  15. main()
  16. {
  17.         int i,j,count;
  18.         count=0;
  19.         for(i=2;;i++)
  20.         {
  21.                 if(isprime(i))
  22.                 {
  23.                         count++;
  24.                         if(count==10001)
  25.                                 {
  26.                                         printf("第1001个素数为:%d",i);
  27.                                         break;
  28.                                 }
  29.                 }
  30.         }
  31. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-10 14:39:12 | 显示全部楼层
运行结果:25164150.0
运行时间:0.156001

  1. import time
  2. def get_asum(max):
  3.     result = 0
  4.     for i in range(1, max + 1):
  5.         result += i**2
  6.     return result

  7. def get_bsum(max):
  8.     result = max**2 * (max + 1)**2 * 0.25
  9.     return result

  10. def get_re(max):
  11.     return get_bsum(max) - get_asum(max)

  12. print(get_re(100))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-3 10:46:37 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-30 22:21 编辑

公式 :

                               
登录/注册后可看大图


Python 3 :
  1. def function(n: int) -> int:
  2.     return n * (n - 1) * (n + 1) * (3 * n + 2) // 12


  3. print(function(100))
复制代码


C++ :
  1. #include<iostream>
  2. using namespace std;



  3. constexpr unsigned long long function(unsigned long long n)noexcept {
  4.     unsigned long long result = n - 1;
  5.     result *= n + 1;


  6.     if (n & 1) {
  7.         result >>= 2;
  8.         result *= n;
  9.         result /= 3;
  10.         n *= 3;
  11.         n += 2;
  12.     }
  13.     else {
  14.         n >>= 1;
  15.         result *= n;
  16.         result /= 3;
  17.         n *= 3;
  18.         ++n;
  19.     }


  20.     return result * n;
  21. }



  22. int main() {
  23.     ios::sync_with_stdio(false);
  24.     cout << function(100) << endl;
  25.     return 0;
  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-9 14:40:32 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-30 22:27 编辑
  1. #include <stdio.h>

  2. void main(){
  3.         //前十个自然数的平方的和是
  4.         //12 + 22 + … + 102 = 385
  5.         //前十个自然数的和的平方是
  6.         //(1 + 2 + … + 10)2 = 552 = 3025
  7.         //因此前十个自然数的平方的和与和的平方之差是 3025 - 385 = 2640。
  8.         //求前一百个自然数的平方的和与和的平方之差。
  9.        
  10.         int i,sum1=0;
  11.         for(i=1;i<=100;i++){//前十个自然数的平方的和
  12.                 sum1+=i*i;
  13.         }
  14.         int j,sum=0;
  15.         for(j=1;j<=100;j++){//前十个自然数的和的平方
  16.                 sum+=j;
  17.         }
  18.         int sum2,x;
  19.         sum2 = sum*sum;
  20.        
  21.         x = sum2 - sum1;
  22.         printf("x=%d",x);
  23. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-22 13:34:59 | 显示全部楼层
JonTargaryen 发表于 2017-3-27 11:09
这个是有公式的呀,根本不需要循环

这个算法棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-5 17:44:49 | 显示全部楼层
  1. list1 = [i for i in range(1, 101)]
  2. list2 = [pow(i, 2) for i in list1]
  3. num1 = sum(list2)
  4. num2 = pow(sum(list1), 2)
  5. print(num2 - num1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-31 16:25:09 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-30 22:28 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. //前一百个数求和
  5. int AddResultPower(){
  6.     int sum = 0;
  7.     for(int i = 1; i<=100;i++){
  8.         sum += i;
  9.     }
  10.     return sum*sum;
  11. }
  12. //前100个数的平方的和
  13. int PowerResultAdd(){
  14.     int sum = 0;
  15.     for(int i = 1; i<=100; i++){
  16.         sum += i*i;
  17.     }
  18.     return sum;
  19. }
  20. void main(){
  21.     int sum_1 = AddResultPower();
  22.     int sum_2 = PowerResultAdd();
  23.     printf("finally result is :%d\n",sum_2 - sum_1);
  24.     return ;
  25.   
  26. }
复制代码

=========================================
finally result is :-25164150
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表