# 暑训day3&4 数论呜呜呜呜

7 篇文章 0 订阅

1. 素数增长趋势
2. 同余
3. 逆元
4. 欧拉！(niupi)
5. ······

1. 唯一分解定理（大部分后续公式基础）
2. 欧几里得算法(gcd——最大公约数)
3. 扩展欧几里得算法(ex_gcd)
4. 各类模运算(注意除法取模求逆元)
5. 模方程(中国剩余定理)
6. 欧拉函数！！！
7. 判断素数(素数打表)
8. Laucs定理
9. 威尔逊定理
10. 费马小定理
11. 莫比乌斯反演(不会）
12. Baby step Giant step(不会)
13. 各种筛(哭了)
14. ······

A - The Euler function HDU - 2824

int phi[N];
void Euler(){
phi[1] = 1;
for(int i = 2; i < N; i ++){
if(!phi[i]){
for(int j = i; j < N; j += i){
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i-1);
}
}
}
}

B - Divisors POJ - 2992

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn=1e9+7;
int n,m;
ll k[83]={0};
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431};

int num(int n, int p)
{
int ans = 0;
int tmp = p;
while(p <= n)
{
ans += n/p;
p = p*tmp;
}
return ans;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
ll ans=1;
for(int i=0;i<=82;i++)
{

int a=num(n,prime[i]);
int b=num(m,prime[i]);
int c=num(n-m,prime[i]);
ans*=(a-b-c+1);
}

printf("%lld\n",ans);

}
return 0;
}

C - Longge’s problem POJ - 2480

n = a * d且 gcd(b, d) = 1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define LL long long
#define MOD 1000000007
using namespace std;
int main(){
LL n;
while(scanf("%lld",&n)!=EOF){
LL ans=1;
for(LL i=2;i*i<=n;i++)
if(n%i==0){
LL k=0,p=1;
while(n%i==0){
k++;
p*=i;
n/=i;
}
ans*=k*(p-p/i)+p;
}
if(n>1)
ans*=2*n-1;
printf("%lld\n",ans);
}
return 0;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
ll ans=0;

for(int i=1;i<=n/2+1;i++)
{

if(n%i==0)
{
ans+=(i*phi(n/i));
}
}
ans+=n;
printf("%lld\n",ans);
}
}

E - Happy 2006 POJ - 2773

for(int i=1;i<=n;i++)
if(gcd(n,i)==1)
prime[res++]=i;
if(k%res)
cout<<k/res*n+prime[k%res-1]<<endl;
else
cout<<(k/res-1)*n+prime[res-1]<<endl;

H - X-factor Chains POJ - 3421

I - Pseudoprime numbers

//O(nlognlogn) 埃筛--------------埃拉托斯特尼筛法，或者叫埃氏筛法
bool prime[a];
void init(){
for(int i=2;i<a;i++)
prime[i]=true;

for(int i=2;i*i<a;i++)//由for(int i=2;i<a;i++)改进
{
if(prime[i])
{
for(int j=i*i;j<a;j+=i)//由for(int j=i*2;j<a;j+=i)改进
prime[j]=false;
}
}
}

//O(n) 线性筛
bool prime[maxn];//prime[i]表示i是不是质数
int p[maxn], tot=0;//p[maxn]用来存质数
void init(int a){
for(int i = 2; i <= a; i ++) prime[i] = true;//初始化为质数
for(int i = 2; i <= a; i++){
if(prime[i]) p[tot ++] = i;//把质数存起来
for(int j = 0; j < tot && i * p[j] <= a; j++){
prime[i * p[j]] = false;
if(i % p[j] == 0) break;//******保证每个合数被它最小的质因数筛去******
}
}
}

const int mod = 1000000009;
const int maxn = 10005;
int inv[maxn];
inv[1] = 1;
for(int i = 2; i < 10000; i++)
inv[i] = inv[mod % i] * (mod - mod / i) % mod;

ans=a/b mod m=a mod(mb)/b;

inv[maxn]=mod_pow(fac[maxn],mod-2);
for(ll i=maxn-1;i>=0;i--)
inv[i]=(inv[i+1]*(i+1))%mod;

• 0
点赞
• 0
收藏
• 打赏
• 0
评论
11-04 8
03-23 604
12-20 512
02-25 111
07-20 101
08-09 4649
10-31 82
04-14 163
12-01 172
03-02 1752
08-02 59

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

AAATK

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。