HZNU-ACM寒假集训Day12小结 数论入门 题解
生活随笔
收集整理的這篇文章主要介紹了
HZNU-ACM寒假集训Day12小结 数论入门 题解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算不出的等式
BJOI2012
看到這題 真沒什么辦法 無奈看題解
1.注意到p/q 聯想到斜率
2.注意到 [ ] 聯想到整點
注意到k在變化,構造一次函數 f(x)=p/q*x ,g(x)=q/p*x
收到【】 的影響,y值即為f(x)下取整后的值,即垂線上整點的個數
又考慮到p==q時 需特判
于是有
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; int main() {
ll x, y;
scanf("%lld%lld", &x, &y);
if (x != y) printf("%lld", (x - ) / * (y - ) / );
else printf("%lld", x * x / );
return ;
}
HDU4475
通過找規律易得出 遞推式 an=an-1*2*(n-1)
這里可以直接預處理
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
#define MOD 1000003
typedef long long ll;
using namespace std; ll a[MOD+]; void fac() {
a[] = ;
for (int i = ; i <= MOD; i++) {
a[i] = (( * a[i - ]) * (i)) % MOD;
}
} int main() {
fac();
int T;
ll n;
scanf("%d", &T);
while (T--) {
scanf("%lld", &n);
if (n >=MOD) {
printf("0\n"); continue;
}
ll ans = a[n];
printf("%lld\n", ans);
}
return ;
}
洛谷 P1372 又是畢業季I
“
此題簡化后,求的是:從1~n中取k個數,使這k個數的最大公約數最大
因為兩個數成倍數關系時,它們的最大公因數是兩數中的較小數,也就是相對來說最大公因數較大
返回題目,這k個數其實就是:x*1,x*2......x*k,及x的1~k倍,但必須保證x*k小于n,在上述條件下,能知道,符合條件的最大的x就是答案,為了找出最大的x,必須使x*k盡量接近n,因為c++的整數除法有自動取整的功能,所以所有情況下,n/k都是最終答案
” by _wc_
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; ll n, k; int main() {
cin >> n >> k;
cout << n / k;
return ;
}
HDU 4704
S(k) 表示用k個x的不定方程解的個數 可以把xi看成xi個1的和,所以最后是C(n-1)(k)
答案即為 2n-1
可以用費馬小定理或歐拉定理優化
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; const int maxn = 1e5 + ;
char a[maxn]; ll quickPower(ll a, ll b,ll m) {
ll ans = ;
ll base = a;
while (b) {
if (b & ) {
ans *= base;
ans %= m;
}
base *= base;
base %= m;
b >>= ;
}
return ans;
} int main() {
ll MOD = 1e9 + ;
while (scanf("%s", a) != EOF) { int len = strlen(a);
ll ans = ;
for (int i = ; i < len; i++) {
ans = (ans * + a[i] - '') % (MOD - );
}
ans = (ans - + MOD - ) % (MOD - );
printf("%lld\n", quickPower(, ans,MOD));
}
return ;
}
總結
以上是生活随笔為你收集整理的HZNU-ACM寒假集训Day12小结 数论入门 题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 官方关于Dialog的介绍
- 下一篇: pyinstaller使用方法及案例