时间复杂度为0(n * sqrt(n)
x
using namespace std;int is(int n){if(n==1)return 0;else{ for(int i=2;i<=sqrt(n);i++) if(n%i==0)return 0;}return 1;}int main(){int n,x;cin>>n;while(n--){ cin>>x; if(is(x))cout<<x<<" ";}return 0;}时间复杂度为O(nloglogn)
x
using namespace std;typedef long long ll;const ll mod = 1e9 + 7;const ll maxn=1e5+5;ll a[maxn];void solve(){ memset(a,1,sizeof(a)); a[0]=a[1]=0;for(ll i=2;i*i<=maxn;i++){ if(a[i]){ for(ll j=i*i;j<=maxn;j+=i){ a[j]=0; } }}ll n;cin>>n;while(n--){ ll x; cin>>x; if(a[x])cout<<x<<" ";}}int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); ll t; t=1; // cin>>t; while(t--)solve(); return 0;}时间复杂度为0(n )
x
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod = 1e9 + 7;const ll maxn=1e5+5;ll a[maxn];vector<ll>is;void solve(){ memset(a,1,sizeof(a)); a[0]=a[1]=0;for(ll i=2;i<=maxn;i++){ if(a[i])is.push_back(i); for(ll p:is){ if(i*p>maxn)break; a[i*p]=0; if(i%p==0)break; }}ll n;cin>>n;while(n--){ ll x; cin>>x; if(a[x])cout<<x<<" ";}}int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); ll t; t=1; // cin>>t; while(t--)solve(); return 0;}判断b的最后一位是不是1,b >>= 1 是右移赋值运算符,等价于 b = b >> 1
x
using namespace std;typedef long long ll;const ll mod=1e9+7;int f(ll a,ll b,ll c){ int r=1; while(b){ if(b&1){ r=r*a%c; } a=(a*a)%c; b>>=1;} return r; }int main(){ll t,n,m,ans;cin>>t>>n>>m;ans=f(t,n,m);//2^10 mod 9=7cout<<t<<"^"<<n<<" "<<"mod "<<m<<"="<<ans<<"\n";//cout<<f(t,n,m)<<"\n";return 0;}c++17中可以使用__gcd
xxxxxxxxxxusing namespace std;int main(){ long long int a,b; cin>>a>>b; cout<<__gcd(a,b)<<" "<<a*b/__gcd(a,b)<<"\n"; return 0;}辗转相除法求最大公约数
using namespace std;int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b);}int main(){ long long int a,b; cin>>a>>b; cout<<gcd(a,b)<<" "<<a*b/gcd(a,b)<<"\n"; return 0;}
根据同余定理可以推出
余数相同的两个区间之差一定可以被k整除
const ll mod = 1e9 + 7;using namespace std;typedef long long ll;const ll mod = 1e9 + 7;const ll MAXN = 1e5+10;ll N,K, C[MAXN], PS[MAXN];map<ll,ll> R; ll ans = 0;void sove(){ cin >> N >> K; R[0] = 1; for(ll i = 1; i <= N; i++){ cin >> C[i]; PS[i] = PS[i-1] + C[i]; R[PS[i]%K]++; } for(auto [r,cnt] : R) ans += (cnt-1)*cnt/2; cout << ans<<"\n";}int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); ll t; t=1; //cin>>t; while(t--)sove(); return 0;}