题目背景 中考了,Pg看着数学卷子的压轴题,陷入了沉思…… 题目描述 众所周知,平面中的每一个整点都有且仅有一个圆心在原点的圆穿过,我们定义这个整点的权值为穿过它的圆的半径的平方。 现在有一个圆心在原点的圆,半径为sqrt{R} 你要求出这个圆所包含的所有整点的权值和。 由于答案可能过大,对 109+7取模。 输入输出格式 输入格式: 一个数字 输出格式: 一行,仅有一个数字。 输入输出样例 输入样例#1: 3 输出样例#1: 12 输入样例#2: 100 输出样例#2: 16012 输入样例#3: 1234567 输出样例#3: 205275050
n年前用C语言打的60分蒟蒻代码
相信是个人都看得懂....
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int index(int x,int y)
{
return x*x+y*y;
}
int main()
{
int n;
long long int sum=0;
scanf("%d",&n);
int x,y;
int a=sqrt(n);
for(x=1;x<=a;x++)
{
for(y=0;y<=a;y++)
{
if(x*x+y*y<=n)
{
sum+=index(x,y);
//printf("%d %d\n",x,y);
sum%=(10*10*10*10*10*10*10*10*10+7);
}
}
}
printf("%lld", (sum*4)%(10*10*10*10*10*10*10*10*10+7));
return 0;
}
看到数据范围就知道会超时,1e14,o(sqrt(n))可过..
圆是一个完美的轴对称图形只算第一象限,然后结果乘4即可
枚举每一对应给定横坐标的且在第一象限内的点个数,统计横坐标权值
横坐标和纵坐标情况一样挑x正半轴或y轴正半轴(二者取其一计算即可),因为要乘4,..
100婚代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll ans,n,k, MOD=1e9+7;
int main()
{
cin>>n;
k=sqrt(n);
for(ll i=1;i<=k;i++)
{
ll temp=(ll)sqrt(n-i*i)%MOD;
ans+=((temp*2+1)%MOD*i%MOD*i%MOD)%MOD;
ans%=MOD;
}
cout<<(ans*4)%MOD;
return 0;
}
不要忘记随乘随%哦,%%%%%,%就完事了....勉勉强强卡过