CF 122A Lucky Division题解

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;
}
算法题解 文章被收录于专栏

主要发布算法题解,题目来源牛客、codeforces、洛谷、Atcoder、leetcode

全部评论

相关推荐

11-23 15:14
中原工学院 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
12-20 11:21
复旦大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务