MT2025 工厂
1.题目
有一家工厂,在一天的开始时,共有x瓶罐头,在这一天结束时,会生产x mod m瓶罐头。
现在已知第一天所拥有的罐头数a,以及m的值。请问,是否存在一个时刻,整个工厂会停止生产(x mod m = 0)?
格式
输入格式:
两个数a,m。
输出格式:
当生产会停止时,输出
Yes,否则输出No。样例 1
输入:
1 5输出:
No备注
其中:1≤a,m≤1e5。
本题相关知识点: 算法基础:模拟
题目来源:码蹄集
2.思路及代码
这个题目有两种解法。
第一种是直接暴力模拟,当循环达到一定次数还没出现x mod m = 0,即可认定不会停止生产。
代码如下:
import java.util.Scanner;
import java.util.*;class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);boolean flag = true;int x = input.nextInt(), m = input.nextInt();x %= m;for (int i = 0; i < 1e5; ++i) {x %= m;x *= 2;if (x == 0) {flag = false; break;} }if (flag) {System.out.println("No");} else {System.out.println("Yes");}input.close();}
}
第二种是创建一个长度为m的数组,每个数字出现的时候就进行标记,当一个数字第二次出现的时候,则可认为已经进入循环。
import java.util.Scanner;
import java.util.*;class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int x = input.nextInt(), m = input.nextInt();boolean[] arr = new boolean[m];while(true) {x *= 2;x %= m;if (x == 0) {System.out.print("Yes");break;} else if (arr[x]){System.out.print("No");break;}arr[x] = true;}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
