题目1104:整除问题
java实现:
import java.util.Scanner;
import java.io.IOException;
import java.io.FileReader;
import java.util.Vector;
import java.util.Arrays;
import java.util.TreeMap;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;class Main
{public static final boolean DEBUG = false;public static final int N = 1000;public static boolean[] vis;public static Vector<Integer> vPrime;public static void sieve(){vis = new boolean[N];Arrays.fill(vis, true);vis[0] = vis[1] = false;for (int i = 2; i < 35; i++) {if (vis[i]) {for (int j = i * i; j < N; j += i) {vis[j] = false;}}}vPrime = new Vector<Integer>();for (int i = 2; i < N; i++) {if (vis[i]) {vPrime.add(new Integer(i));}}}public static void main(String[] args) throws IOException {Scanner cin;int n, a;if (DEBUG) {cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt"));} else {cin = new Scanner(System.in); }sieve();while (cin.hasNext()) {n = cin.nextInt();a = cin.nextInt();TreeMap<Integer, Integer> m = new TreeMap<Integer, Integer>();for (int i = 0; i < vPrime.size(); i++) {int div = vPrime.elementAt(i);if (div > a) break;if (a % div == 0) {int c = 0;while (a % div == 0) {c++;a /= div;}m.put(div, c);}}if (a != 1) m.put(a, 1);TreeMap<Integer, Integer> m2 = new TreeMap<Integer, Integer>();for (int i = 2; i <= n; i++) {int tmp = i;Set<Integer> s = m.keySet();Iterator<Integer> it = s.iterator();while (it.hasNext()) {int div = it.next().intValue();if (div > tmp) break;if (tmp % div == 0) {int c = 0;while (tmp % div == 0) {c++;tmp /= div;}if (m2.containsKey(div)) {int temp = m2.get(div);m2.put(div, temp + c);} else {m2.put(div, c);}}}}int ans = Integer.MAX_VALUE;Vector<Integer> v = new Vector<Integer>(m.values());int i = 0;Collection<Integer> c = m2.values();Iterator<Integer> it = c.iterator();while (it.hasNext()) {ans = Math.min(ans, it.next().intValue() / v.elementAt(i));i++;}if (ans == Integer.MAX_VALUE) ans = 0;System.out.println(ans);}}
}
C++实现:
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <bitset>
#include <algorithm>
#include <limits>using namespace std;const int N = 1000;bitset<N> vis;
vector<int> vPrime;void sieve();int main()
{int n, a;#ifndef ONLINE_JUDGEifstream cin("d:\\OJ\\uva_in.txt");#endif // ONLINE_JUDGEsieve();while (cin >> n >> a) {map<int, int> m;for (int i = 0; i < vPrime.size(); i++) {if (vPrime[i] > a) break;if (a % vPrime[i] == 0) {int c = 0;while (a % vPrime[i] == 0) {c++;a /= vPrime[i];}m[vPrime[i]] = c;}}if (a != 1) m[a] = 1;map<int, int> m2;for (int i = 2; i <= n; i++) {int tmp = i;for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {if (it->first > tmp) break;if (tmp % it->first == 0) {int c = 0;while (tmp % it->first == 0) {c++;tmp /= it->first;}m2[it->first] += c;}}}vector<int> v;for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) v.push_back(it->second);int i = 0;int ans = numeric_limits<int>::max();for (map<int, int>::iterator it = m2.begin(); it != m2.end(); it++, i++) {it->second = it->second / v[i];ans = min(ans, it->second);}if (ans == numeric_limits<int>::max()) ans = 0;cout << ans << endl;}return 0;
}void sieve()
{vis.set();vis[0] = vis[1] = 0;for (int i = 2; i < 40; i++) {if (vis[i]) {for (int j = i * i; j < N; j += i) {vis[j] = 0;}}}for (int i = 0; i < N; i++) {if (vis[i]) vPrime.push_back(i);}
}
题目1104:整除问题相关推荐
- 题目 1224: 整除的尾数
时间限制: 1Sec 内存限制: 128MB 题目描述:(原题链接) 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢 输入: 输入数据有若干组,每组数据包含二个整 ...
- 1224:整除的尾数 c语言
题目描述 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢 输入 输入数据有若干组,每组数据包含二个整数a,b(0<a<10000, 10<b&l ...
- 2021牛客寒假算法基础集训营2 D.牛牛与整除分块
2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...
- LeedCode: 计算器专场
今天滴滴第一面遇到这道题,mark一下! 初级版 题目 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数 ...
- Apktool重打包Apk
1.下载软件 首先下载apktool.bat和apktool.jar,这两个工具我已上传到了github上,可以直接下载. 下载链接:https://github.com/HelloKittyNII/ ...
- leetcode题解:两数相除
题目描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 整数 ...
- 网易2019实习生招聘题目 被3整除
题目 小Q得到一个神奇的数列: 1, 12, 123,-12345678910,1234567891011-. 并且小Q对于能否被3整除这个性质很感兴趣. 小Q现在希望你能帮他计算一下从数列的第l个到 ...
- LeetCode 刷题系列(前缀和题目)之 974. 和可被 K 整除的子数组
题目: 给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续.非空) 子数组 的数目. 子数组 是数组的 连续 部分. 示例 1: 输入:nums = [4,5,0,- ...
- HDOJ题目分类大全
版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...
最新文章
- CentOS 安装Python3
- 网络推广外包浅析当下网站优化处于健康状态有利于网络推广外包
- spring boot filter配置方式
- SpringMVC的使用与requestMapper的使用
- Eclipse里Java项目设置Java编辑器版本的位置
- delphi 的一些备忘
- linux setsockopt函数
- vSphere 7融合Kubernetes,构建现代化应用的平台
- IIS Express局域网访问配置
- Recursive Depth first search graph(adj matrix)
- BGP中的环路和次优路径问题
- Oracle表名、列名、约束名的长度限制
- 动态定义控件时事件触发的总结
- (转)《精通比特币》原码分析: rpc_block
- 修改linux的防火墙
- php 微信小程序签到功能,微信小程序每日签到
- adb命令查看手机电池信息
- 原生js做购物车全选选中商品显示价格和小计的计算
- 培训演讲的小技巧,你知道多少?
- 算法大师孙膑--田忌赛马(转自labuladong)
热门文章
- Silverlight项目构成
- python 程序流程控制结构-【笔记】《python语言程序设计》——程序的控制结构...
- 0基础学python看什么书-编程语言学python必看这三本书,少走一半弯路
- python 编程一日一练-「每日一练」巧用python生成随机数
- python urllib.request 爬虫 数据处理-Python网络爬虫(基于urllib库的get请求页面)
- python中处理日期和时间的标准模块是-Python时间相关处理
- python基本语法规则-Python-基本语法元素
- excel调用python编程-如何在excel中调用python脚本
- 西安python工资怎么样-在西安为什么对Python编程需求这么大?工资这么高?
- python没基础可以学吗-终于认识没有基础怎么学python