日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HZNU-ACM寒假集训Day12小结 数论入门 题解

發布時間:2024/10/8 编程问答 27 如意码农
生活随笔 收集整理的這篇文章主要介紹了 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小结 数论入门 题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。