This commit is contained in:
ljcjames 2022-08-18 08:24:59 +08:00
parent e1d7c2a87d
commit 5edf2d09fd
12 changed files with 201 additions and 19 deletions

BIN
8.16/A-Frog copy/A.pdf (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,12 @@
# 题目
* 链接
### 题意
### 做法
### 关键词
### 易错点
*
### 工具箱
*

View File

@ -0,0 +1 @@
#

46
8.16/A-Frog copy/main.cpp Normal file
View File

@ -0,0 +1,46 @@
#include <iostream>
#include<cstdio>
#include<algorithm>
#include <cmath>
#include <cstdlib>
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<x2+y2||a*x1+b*y1<a*x2+b*y2)
{
printf("%d %d\n",x1,y1);
}
else
{
printf("%d %d\n",x2,y2);
}
}
return 0;
}

View File

View File

View File

View File

@ -0,0 +1,7 @@
## z:\Chao\src\Template\test\in.txt
2020/03/14 ÖÜÁù 11:41:28.68
Hello Easy C++ project!
-----------------------------------------------
Process exited after 200 ms with return value 0

View File

@ -1,12 +1,16 @@
# フ籠ソ
* チエスモ
# 青蛙的约会
* https://vjudge.net/contest/509210#problem/A
### 题意
一定长度圆形跑道,两人起点不同,速度不同,问何时最快相遇
### 做法
exgcd线性方程求解取最小非负整数
### 关键词
exgcd线性方程求解取最小非负整数
### 易错点
*
* 取最小非负整数
* exgcd中//x,y没赋初值
* 题意printf("Impossible");//WA 罪魁祸首
### 工具箱
*
* 题解 https://www.luogu.com.cn/problem/solution/P1516
* 线性同余 —— 同余方程组的求解 https://zhuanlan.zhihu.com/p/451193655
* 数学一本通1.3.5京东读书

View File

@ -2,19 +2,36 @@
#include<cstdio>
#include<algorithm>
#include <cmath>
#include <cstdlib>
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;
}

55
8.16/I-GCD.cpp Normal file
View File

@ -0,0 +1,55 @@
#include<iostream>
#include<cmath>
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);
}
}

37
8.16/I-GCDreference.cpp Normal file
View File

@ -0,0 +1,37 @@
#include<cstdio>
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;
}