Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define pb push_back
- #define task "SPRIME"
- using namespace std;
- ll Pow(ll x, ll mu, ll mod)
- {
- if(mu == 0) return 1%mod;
- if(mu == 1) return x%mod;
- ll t = Pow(x, mu/2, mod)%mod;
- if(mu%2 == 0) return (t%mod*t%mod)%mod;
- else return ((t%mod*t%mod)%mod*x%mod)%mod;
- }
- bool miler(ll d, ll n, ll a)
- {
- ll t = Pow(a, d, n);
- if(t == 1 || t == n-1) return true;
- while(d != n-1){
- t = (t*t)%n;
- d *= 2;
- if(t == 1) return false;
- if(t == n-1) return true;
- }
- return false;
- }
- bool chk(ll n)
- {
- if(n <= 1 || n == 4) return false;
- if(n <= 3 || n == 7 || n == 61) return true;
- if(n%2 == 0) return false;
- ll d = n-1;
- while(d % 2 == 0){
- d/=2;
- }
- if(miler(d, n, 2) && miler(d, n, 7) && miler(d, n, 61) && miler(d, n, 3)){
- return true;
- }
- return false;
- }
- int main()
- {
- if(fopen(task".INP", "r")){
- freopen(task".INP", "r", stdin);
- freopen(task".OUT", "w", stdout);
- }
- ll L, R;
- cin >> L >> R;
- ll ans = 0;
- ll p = 1;
- vector<ll>a;
- a.pb(0);
- while(a.size() != 0){
- vector<ll>b;
- for(ll x : a){
- for(int i=1; i<=9; i++){
- ll cur = i*p + x;
- //cout << cur <<"\n";
- if(cur <= R && chk(cur)){
- b.pb(cur);
- if(cur >= L){
- ans ++;
- //cout << cur <<" ";
- }
- }
- }
- }
- a.swap(b);
- p *= 10;
- }
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment