1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

/*autor: Agnieszka Klich*/

using namespace std;

long long int l, r;
long long int ile=0;

int pierwszaCyfra(long long int liczba)
{
	if(liczba<0) liczba*=-1;
	while(liczba>9){
		liczba/=10;
	};
	return liczba;
}

long long int zeroNaPozycji(long long int liczba){
	if(liczba<0) liczba*=-1;
	long long int pozycja = 1;
	int cyfra;
	while(liczba>9){
		cyfra = liczba%10;
		if(cyfra==0) return pozycja;
		liczba/=10;
		pozycja*=10;
	};
	return -1;
}

bool potyczkowa (long long int liczba)
{
	if(liczba==0) return false;
	if(liczba<0) liczba*=-1;
	
	long long int liczba_copy = liczba;
	int ostatniaCyfra = liczba%10;
	int dwieOstatnieCyfry = liczba%100;
	int trzyOstatnieCyfry = liczba%1000;
	int podzielnoscPrzez7 = liczba%7;
	int sumaCyfr = 0;
	int cyfra;
	
	do{
		cyfra = liczba_copy%10;
		liczba_copy /=10;	
		sumaCyfr+=cyfra;
	} while(liczba_copy>0);
	
	liczba_copy = liczba;
		
	do{
		cyfra = liczba_copy%10;
		if(cyfra==0){
			return false;
		}
		liczba_copy -= cyfra;
		liczba_copy /=10;
		if(cyfra==2 && ostatniaCyfra%2!=0) return false;
		if(cyfra==3 && sumaCyfr%3!=0) return false;
		if(cyfra==4 && dwieOstatnieCyfry%4!=0) return false;
		if(cyfra==5 && ostatniaCyfra!=5) return false;
		if(cyfra==6 && ostatniaCyfra%2!=0) return false;
		if(cyfra==6 && sumaCyfr%3!=0) return false;
		if(cyfra==7 && podzielnoscPrzez7!=0) return false;
		if(cyfra==8 && trzyOstatnieCyfry%8!=0) return false;
		if(cyfra==9 && sumaCyfr%9!=0) return false;
	} while(liczba_copy>0);
	
	return true;
}

int main(int argc, char** argv) {
	cin >> l >> r;
	
	for (long long int i=l; i<=r; ++i)
	{
		int pierwsza = pierwszaCyfra(i);
		
		long long int pozycjaZero = zeroNaPozycji(i);
		while(pozycjaZero!=-1){
			i+=pozycjaZero;
			pozycjaZero = zeroNaPozycji(i);
		}
				
		if(i%pierwsza!=0){
//			cout << "i = " << i << "zwiekszam o:" << pierwsza-i%pierwsza << endl;
			i+= pierwsza-i%pierwsza;
		}
//		cout << "sprawdzam: " << i << endl;
		if(i<=r && potyczkowa(i)){
//			cout << "potyczkowa: " << i << endl;
			++ile;
		}
	}
	cout << ile << "\n";
	
	return 0;
}