From 5edf2d09fde9b414a6def29c8c3350eb91423f6d Mon Sep 17 00:00:00 2001 From: ljcjames Date: Thu, 18 Aug 2022 08:24:59 +0800 Subject: [PATCH] 8.17 --- 8.16/A-Frog copy/A.pdf | 3 ++ 8.16/A-Frog copy/Readme.md | 12 ++++++++ 8.16/A-Frog copy/doc/Readme.md | 1 + 8.16/A-Frog copy/main.cpp | 46 ++++++++++++++++++++++++++++ 8.16/A-Frog copy/test/in.txt | 0 8.16/A-Frog copy/test/in2.txt | 0 8.16/A-Frog copy/test/in3.txt | 0 8.16/A-Frog copy/test/out.txt | 7 +++++ 8.16/A-Frog/Readme.md | 18 ++++++----- 8.16/H-Relatives/main.cpp | 41 +++++++++++++++++-------- 8.16/I-GCD.cpp | 55 ++++++++++++++++++++++++++++++++++ 8.16/I-GCDreference.cpp | 37 +++++++++++++++++++++++ 12 files changed, 201 insertions(+), 19 deletions(-) create mode 100644 8.16/A-Frog copy/A.pdf create mode 100644 8.16/A-Frog copy/Readme.md create mode 100644 8.16/A-Frog copy/doc/Readme.md create mode 100644 8.16/A-Frog copy/main.cpp create mode 100644 8.16/A-Frog copy/test/in.txt create mode 100644 8.16/A-Frog copy/test/in2.txt create mode 100644 8.16/A-Frog copy/test/in3.txt create mode 100644 8.16/A-Frog copy/test/out.txt create mode 100644 8.16/I-GCD.cpp create mode 100644 8.16/I-GCDreference.cpp diff --git a/8.16/A-Frog copy/A.pdf b/8.16/A-Frog copy/A.pdf new file mode 100644 index 0000000..de1b01c --- /dev/null +++ b/8.16/A-Frog copy/A.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae5f9bfaf2af1e1d5b3b4baa2946325356b476dad8d42dd1e4494e7ffeabe830 +size 107414 diff --git a/8.16/A-Frog copy/Readme.md b/8.16/A-Frog copy/Readme.md new file mode 100644 index 0000000..cc02b16 --- /dev/null +++ b/8.16/A-Frog copy/Readme.md @@ -0,0 +1,12 @@ +# 题目 +* 链接 +### 题意 + +### 做法 + +### 关键词 + +### 易错点 +* +### 工具箱 +* \ No newline at end of file diff --git a/8.16/A-Frog copy/doc/Readme.md b/8.16/A-Frog copy/doc/Readme.md new file mode 100644 index 0000000..4e768b5 --- /dev/null +++ b/8.16/A-Frog copy/doc/Readme.md @@ -0,0 +1 @@ +# \ No newline at end of file diff --git a/8.16/A-Frog copy/main.cpp b/8.16/A-Frog copy/main.cpp new file mode 100644 index 0000000..6d98384 --- /dev/null +++ b/8.16/A-Frog copy/main.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +using namespace std; +long long exgcd(long long a,int b,int &x,int &y) +{ + if(b==0) + { + //x,y没赋初值 + x=1; + y=0; + return a; + } + int ret=exgcd(b,a%b,x,y); + int tmp=x; + x=y; + y=tmp-a/b*y; + return ret; +} +int main() +{ + int a,b,c; + while(~scanf("%d%d%d",&a,&b,&c)) + { + if(a==0&&b==0&&c==0) + { + break; + } + int x0,y0; + int g=exgcd(a,b,x0,y0); + int x1=(c/g*x0%(b/g)+b/g)%(b/g),y1=(c-a*x1)/b; + int y2=(c/g*y0%(a/g)+a/g)%(a/g),x2=(c-b*y2)/a;//除a + x1=abs(x1);x2=abs(x2);y1=abs(y1);y2=abs(y2);//abs()在C语言中只对int整型生效 + if(x1+y1 #include #include +#include using namespace std; +int q,n; +int t1=0,t; int main() { - int t; - scanf("%d",&t); - while(t--) - { - int n; - scanf("%d",&n); - for(int i=1;i<=n; i++) - { - - } - } - return 0; +// scanf("%d",&t); + while(1) + { + scanf("%d",&n); + if(n==0) + { + break; + } +// int len=sqrt(n); + int res=n; + for(int i=2;i*i<=n;i++)//i=2 + { + if(n%i==0) + { + res=res-res/i; + } + while(n%i==0) + { + n/=i; + } + } + if(n>1) + res=res-res/n; + printf("%d\n",res); + } + return 0; } diff --git a/8.16/I-GCD.cpp b/8.16/I-GCD.cpp new file mode 100644 index 0000000..b646904 --- /dev/null +++ b/8.16/I-GCD.cpp @@ -0,0 +1,55 @@ +#include +#include +using namespace std; +int Euler(int n) +{ +// if(n==1) return 1; + int res=n; + int len=sqrt(n); + for(int i=2;i<=len;i++) + { + if(n%i==0) + { + n/=i; + res=res-res/i; +// printf("(%d:%d)",i,res); + } + while(n%i==0) + { + n/=i; + } + } + if(n>1)//key! + res=res-res/n; + return res; +} +int main() +{ + int t,n,m; + int ans; + scanf("%d",&t); + while(t--) + { + scanf("%d%d",&n,&m);//又忘了& + int len=sqrt(n); + ans=0; + for(int i=1;i<=len;i++) + { + if(n%i!=0) continue; + if(i>=m&&i!=n/i) + { + ans+=Euler(n/i); + } + if(n/i>=m) + { + ans+=Euler(i); + } + else + { + break; + } +// printf("%d:%d\n",n/i,ans); + } + printf("%d\n",ans); + } +} diff --git a/8.16/I-GCDreference.cpp b/8.16/I-GCDreference.cpp new file mode 100644 index 0000000..1f33d06 --- /dev/null +++ b/8.16/I-GCDreference.cpp @@ -0,0 +1,37 @@ + +#include +using namespace std; +int Euler(int n){ + int m=n; + for(int i=2;i*i<=n;i++){ + if(n%i==0)//第一次找到的必为素因子 + { + m-=m/i;//把是素因子i的倍数的数的数目减掉 i,2i,3i,···,(m/i)*i + while(n%i==0) + n/=i;//把该素因子全部约掉 + printf("(%d:%d)",i,m); + } + } + if(n>1) //还有一个比根号n大的素因子 ,也就是现在这个n + m-=m/n; + return m; +} +int main(){ + int T; + scanf("%d",&T); + int N,M; + while(T--){ + scanf("%d%d",&N,&M); + long long sum=0; + for(int i=1;i*i<=N;i++){//只遍历到根号n,节省时间 + if(N%i==0){ + if(i>=M) sum+=Euler(N/i);//i为N的约数(1<=i<=根号n) + if((N/i)!=i&&(N/i)>=M) sum+=Euler(i);//(N/i)是N的约数,(N/i)>=根号N + + printf("%d:%d\n",i,sum);} + } + printf("%lld\n",sum); + } + return 0; +} +