CF 122A Lucky Division


time limit per test : 2 second
memory limit per test : 256 megabytes
input : standard input
output : standard output

Description

Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.

Petya calls a number almost lucky if it could be evenly divided by some lucky number. Help him find out if the given number n is almost lucky.

Input

The single line contains an integer n (1 ≤ n ≤ 1000) — the number that needs to be checked.

Output

In the only line print "YES" (without the quotes), if number n is almost lucky. Otherwise, print "NO" (without the quotes).

Example

input

47

output

YES

input

16

output

YES

input

78

output

NO

Note

Note that all lucky numbers are almost lucky as any number is evenly divisible by itself.

In the first sample 47 is a lucky number. In the second sample 16 is divisible by 4.

Solution

  思路:

 法1:


 先判断n是不是lucky number,不是就下一步。因为n〈1000,所以再打表将由4和7组成的数存起来。判断n能否被这些数中的任意一个整数。

#include<iostream>
#include<algorithm>
#include<string>
#define ll long long
using namespace std;


int main(){
    ll n,temp;
    int nums[] ={4,7,44,47,74,77,444,447,474,477,744,747,774,777};
    cin>>n;
    temp = n;
    while(temp){
        if(temp%10 == 7 || temp % 10 == 4){
            temp /= 10;
        }
        else break;
        if(temp==0){ 
            cout<<"YES";
            return 0;
        }
    }

    for(int i = 0;i<sizeof(nums)/sizeof(int);i++){
        if(n%nums[i]==0){
            cout<<"YES";
            return 0;
        }
    }
    cout<<"NO";
    return 0;
}



 法2:


 从4开始遍历直到n,判断当前遍历值是否是n的因子,如果是再判断遍历值是否为lucky number。这种方法囊括了n为lucky number 的情况。

#include<iostream>
#include<algorithm>
#include<string>
#define ll long long
using namespace std;
=


int main() {
    int n;
    cin >> n;
    for (int i = 4; i <= n; i++) {
        if (n % i == 0) {
            bool flag = false;
            string s = to_string(i);
            for (int j = 0; j < s.length(); j++) {
                if (s[j] != '4' && s[j] != '7') {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                cout << "YES";
                return 0;
            }
        }
    }
    cout << "NO";
    return 0;
}