CSP-S 2020模擬訓練題1-信友隊T1 四平方和
阿新 • • 發佈:2020-11-04
題意簡述
\(n\)是正整數,其四個最小的因子分別為\(d_1,d_2,d_3,d_4\)。
求對於所有的\(n \le m\)滿足
\[d_1^2+d_2^2+d_3^2+d_4^2=n \]的\(n\)的個數。
分析
這是一道數競題,下面來求\(n\)。
顯然\(d_1=1\),則\(n=1+d_2^2+d_3^2+d_4^2\)。
若\(n\)是奇數,則其因子都是奇數,其平方和為四個奇數相加為偶數,矛盾。故n為偶數,\(d_2=2\),則\(n-5=d_3^2+d_4^2\)。
此時,\(d_3\)只可能是\(3,4\)或者大於\(4\)的質數
- 若\(d_3=3\),則\(d_4=4\)
- 若\(d_3=4\),則由奇偶性可得,\(d_4\)一定為奇數,所以\(d_4^2 \equiv 1(\mbox{mod } 4)\),但\(n-5-d_3^2=n-21 \equiv 3(\mbox{mod }4)\),所以矛盾。
所以\(n\)只能是一個大於\(4\)的質數,且\(d_4=2d_3\),故\(n-5=5d_3^2 \Longrightarrow n=5(d_3^2+1)\)。故\(5 \nmid n\),即\(d_3=5,d_4=10\),得\(n=130\)。故\(\forall n \in \mathbb{N^+}\)只有\(n=130\)
Code
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<map> #include<set> #include<queue> #include<vector> #define IL inline #define re register #define LL long long #define ULL unsigned long long #define re register #define debug printf("Now is %d\n",__LINE__); using namespace std; template<class T>inline void read(T&x) { char ch=getchar(); while(!isdigit(ch))ch=getchar(); x=ch-'0';ch=getchar(); while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} } inline LL read() { int x=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); x=ch-'0';ch=getchar(); while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} return x; } int G[55]; template<class T>inline void write(T x) { int g=0; if(x<0) x=-x,putchar('-'); do{G[++g]=x%10;x/=10;}while(x); for(re int i=g;i>=1;--i)putchar('0'+G[i]);putchar('\n'); } LL n; int main() { n=read(); if(n>=130) cout<<1<<endl; else cout<<0<<endl; return 0; }