鱼C论坛

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

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

[复制链接]
发表于 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 | 显示全部楼层
#include <cstdio>
#include <cmath>
#include <cstdlib>
#define N 100

int main(int argc, char * argv[])
{
        long long int SumSquares = 0;
        long long int SquaresSum = 0;
        long long int temp;
        temp = N * (N + 1) / 2;
        SumSquares = temp * temp;
        SquaresSum = N * (N + 1) * (2 * N + 1) / 6;
        printf("value = %llu", abs(SumSquares - SquaresSum));

        fputc('\n', stdout);
        system("pause");
        return 0;
}

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

使用道具 举报

发表于 2018-8-23 17:43:47 | 显示全部楼层
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 | 显示全部楼层
i = 1
t = 0
while i <= 100:
    t += i**2
    i += 1

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 | 显示全部楼层
#include <stdio.h> 
main()
{
        int i,j,sum1,sum2,cha;
        sum1=sum2=cha=0;

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

使用道具 举报

发表于 2019-3-14 17:06:25 | 显示全部楼层
#include <stdio.h>
#include<math.h>
int isprime(int x)//是素数则返回1,不是则返回0.
{
        int i;
        for(i=2;i<=sqrt(x);i++)
        {
                if(x%i==0)
                {
                        return 0;
                }
        }
        return 1;
}
main()
{
        int i,j,count;
        count=0;
        for(i=2;;i++)
        {
                if(isprime(i))
                {
                        count++;
                        if(count==10001)
                                {
                                        printf("第1001个素数为:%d",i);
                                        break;
                                }
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-10 14:39:12 | 显示全部楼层
运行结果:25164150.0
运行时间:0.156001
import time
def get_asum(max):
    result = 0
    for i in range(1, max + 1):
        result += i**2
    return result

def get_bsum(max):
    result = max**2 * (max + 1)**2 * 0.25
    return result

def get_re(max):
    return get_bsum(max) - get_asum(max)

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

使用道具 举报

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

公式 :

                               
登录/注册后可看大图


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


print(function(100))


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



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


    if (n & 1) {
        result >>= 2;
        result *= n;
        result /= 3;
        n *= 3;
        n += 2;
    }
    else {
        n >>= 1;
        result *= n;
        result /= 3;
        n *= 3;
        ++n;
    }


    return result * n;
}



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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

发表于 2019-12-31 16:25:09 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-30 22:28 编辑
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//前一百个数求和
int AddResultPower(){
    int sum = 0;
    for(int i = 1; i<=100;i++){
        sum += i;
    }
    return sum*sum;
}
//前100个数的平方的和
int PowerResultAdd(){
    int sum = 0;
    for(int i = 1; i<=100; i++){
        sum += i*i;
    }
    return sum;
}
void main(){
    int sum_1 = AddResultPower();
    int sum_2 = PowerResultAdd();
    printf("finally result is :%d\n",sum_2 - sum_1);
    return ;
  
}
=========================================
finally result is :-25164150
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-21 13:33:26 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-30 22:28 编辑
//公式法快速解决
//(n(1+n))/2    自然数前n项和的公式     
//(n(n+1)(2n+1))/6      自然数前n项平方和的公式
#include <stdio.h>
#include <math.h>

#define MAX 100

int main(void)
{
        long int result = 0;

        result = pow((MAX * (1 + MAX)) / 2, 2) - (MAX * (MAX + 1) * (2 * MAX + 1)) / 6;

        printf("result = %ld\n", result);

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

使用道具 举报

发表于 2020-1-26 10:02:04 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-30 22:28 编辑
#include <stdio.h>
#define NUM 100
int main(){
        long long  result1 = 0;
        long long result2 = 0;
        long long result;
        long long i;
        for (i=1;i<=NUM;i++){
                result1 = result1 + i * i;
                result2 = result2 + i;
        }
        result = result2 * result2 - result1;

        printf("%ld\n",result);

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

使用道具 举报

发表于 2020-2-6 16:09:53 | 显示全部楼层
有时候需要这样简单的思路去解决一些问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 05:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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