light oj 1341 唯一性分解【数论入门】

题意就是:给你两个数,然后让你去求第一个数分解的因子对数,其中要求因子对中的任意两个数都必须大于第二个数,声明对于(2,6)和(6,2)是一个因子对。

分析:先利用唯一性分解的方法对第一个数进行分解,然后根据定理这个数的因子个数为(1+a1)(1+a2)。。。(1+an)然后再除以2得到因子对个数,再根据第二个数来减去相应的值。对于这道题主要是学习到了唯一性定理中关于因子个数的计算,这一点是我所不知道的,也是我感觉是这道题求解的重点,其次就是一些细节的处理,比如关于第二个数和第一个数关系的特判,以及我在素数筛选时,int的爆范围等等,都是以后应该注意到的地方。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>

using namespace std;

typedef long long ll;
const int maxn = 1e6 + 10;
bool isprime[maxn];
ll prime[maxn], k;

void ini()
{
		memset(isprime, true, sizeof isprime);
		memset(prime, 0, sizeof prime);
}

void check()
{
		//isprime
		k = 0;
		int re = sqrt(maxn);
		for (int i = 2; i <maxn; i++)
		{
				if (isprime[i])
				{
						prime[k++] = i;
						for (long long j =(long long) i * i; j < maxn; j += i)  isprime[j] = false;
				}
		}
}

ll solve(ll num)
{
		ll sum = 1;
		for (int i = 0; i < k&&prime[i] * prime[i] <= num; i++)
		{
				if (num%prime[i] == 0)
				{
						ll ans = 0;
						while (num%prime[i] == 0)
						{
								ans++;
								num /= prime[i];
						}
						sum *= (1 + ans);
				}
		}
		if (num > 1)    sum *= 2;
		return sum;
}

int main()
{
		int t;
		scanf("%d", &t);
		ini();
		check();
		for (int i = 1; i <= t; i++)
		{
				ll area, a;
				scanf("%lld %lld", &area, &a);
				if (area < a*a)
				{
						printf("Case %d: 0\n", i);
						continue;
				}
				ll res = solve(area);
				res /= 2;
				for (int j = 1; j < a; j++)    if (area%j == 0)   res--;
				printf("Case %d: %lld\n", i, res);
		}
		//system("pause");
		return 0;
}

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值