给定一个初始正整数n,我们需要在平面上适当的找尽量少的不同的点 M, 使对于每个正整数 k(k≤n) 至少一条直线上恰好通过 k 个点。
找到规律:从n往下的等差数列的求和,公差为2,分别求和到2或者1。
注意:求和数要用long long,否则数据会溢出
代码如下:
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
long long n;
long long M;
while(scanf("%lld",&n)!=EOF){
if(n%2==0){
M = (n+2)*n/4;
M %=1000000007;
}else{
M=(n/2 +1 )*(1+n)/2;
M %=1000000007;
}
printf("%lld\n",M);
}
return 0;
}
//要用long long 否则超过M范围