分解素因数

对一个数分解质因数,使得其满足x=p1^e1*p2^e2*...*pn^en*

例一 九度1207 求质因数的个数

题目描述:
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入:

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。

输出:

对于每组数据,输出N的质因数的个数。

样例输入:
120
样例输出:
5

#include<stdio.h>
bool mark[100001];
int prime[100001];
int primesize;
void init() {
	int i, j;
	primesize = 0;
	for (i = 2; i <= 100000; i++) {
		if (mark[i] == true)	continue;
		prime[primesize++] = i;
		for (j = i*i; j <= 100000; j += i) {
			mark[i] = true;
		}
	}
}

int main() {
	init();
	int n;
	while (scanf("%d", &n) != EOF) {
		int ansprime[30];//按顺序保存分解出来的质因数
		int anssize=0;//素因数的个数
		int ansnum[30];//按顺序保存当前素因数对应的幂指数
		int ans = 0;
		int i, j;
		for (i = 0; i < primesize; i++) {
			if (n%prime[i] == 0) {  //如果当前素数是一个因数
				ansprime[anssize] = prime[i]; //将该因数保存在数组中
				ansnum[anssize] = 0; //初始化当前幂指数为0
				while (n%prime[i] == 0) {  //开始循环判断得出该素因数对应的幂指数
					ansnum[anssize]++; 
					n = n / prime[i];
				}
				anssize++; 
				if (n == 1) break;
			}
		}
		if (n != 1) {  //证明剩余的因数一定是n,一个大于100000的素因数
			ansprime[anssize] = n;
			ansnum[anssize] = 1;
			anssize++;
		}
		for (i = 0; i < anssize; i++) {
			ans += ansnum[i];
		}
		printf("%d\n", ans);
	}
	return 0;
}

九度1104 整除问题(比较难,上交的题)

题目描述:

给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

输入:

两个整数n(2<=n<=1000),a(2<=a<=1000)

输出:

一个整数.

样例输入:
6 10
样例输出:
1
//整除问题
#include<stdio.h>
bool mark[1001];
int prime[1001];
int primesize;
void init() {
	int i, j;
	primesize = 0;
	for (i = 1; i <= 1000; i++) {
		mark[i] = false;
	}
	for (i = 2; i <= 1000; i++) {
		if (mark[i] == true) continue;
		mark[i] = true;
		prime[primesize++] = i;
		for (j = i*i; j <= 1000; j += i) {
			mark[j] = true;
		}
	}
}

int main() {
	int i, j;
	int n, a;
	init();
	while (scanf("%d %d", &n, &a) != EOF) {
		int cnt[1001]; 
		int cnt2[1001];
		//先将两个表示幂指数的数组初始化为0
		for (i = 0; i < 1001; i++) {
			cnt[i] = cnt2[i] = 0;
		}
		//对n!分解质因数
		for (i = 0; i < primesize; i++) {
			int t = n;
			while (t) {
				cnt[i] += t / prime[i];
				t = t / prime[i];
			}
		}
		//对a分解质因数
		int ans = 123123123;//定义一个超级大的数作为比较的基准
		for (i = 0; i < primesize; i++) {
			if (a%prime[i] == 0) {
				while (a%prime[i] == 0) {
					cnt2[i]++;
					a = a / prime[i];
				}
				if (cnt[i] / cnt2[i] < ans) {
					ans = cnt[i] / cnt2[i];
				}
			}
		}
		printf("%d\n", ans);
	}
	
}
九度1087 约数的个数

题目描述:

输入n个整数,依次输出每个数的约数的个数

输入:

输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。

输出:

可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。

样例输入:
5
1 3 4 6 12
样例输出:
1
2
3
4
6
       
//约数的个数
#include<stdio.h>
#include<math.h>
int count(int x) {
	int i;
	int ans=0;
	for (i = 1; i <= sqrt(x); i++) {
		if (x%i == 0) {  //因数是对称的
			ans += 2;
		}
		if (i*i == x) {  
			ans--;
		}
	}
	return ans;
}
int main() {
	int n;
	int i, j;
	int a[1001];
	while (scanf("%d", &n) != EOF) {
		for (i = 0; i < n; i++) {
			scanf("%d", &a[i]);
		}
		for (i = 0; i < n; i++) {
			printf("%d\n", count(a[i]));
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值