列表

详情


NC15977. 阿汤的疑惑

描述

阿汤同学最近刚学数论,他发现数论实在是太有趣了,于是他想让你也感受一下数论的乐趣。现在他给你一个正整数 N 和一个正整数 M,要求你用 N 对 M 进行取余操作,即 N % M,记余数为 S。
但是他发现这样好像并不能让你感受到数论的乐趣,于是他想让你在N 对 M 取余操作的基础上再求出这个余数 S 能分解出多少个不同质因数。

质因数:质因数在数论里是指能整除给定正整数的质数,质数就是只能整除 1 和本身的数,定义 2 是最小的质数。

输入描述

从标准输入读入数据。
输入包含多组数据,第一行一个整数 T 代表数据组数。接下来依
次描述每组数据,对于每组数据:
第一行输入正整数 N,第二行输入正整数 M

【数据规模】
1≤N≤10^100
1≤M≤2^31-1

输出描述

输出到标准输出。
对于每组数据,输出一行:
余数 S 能分解出的不同质因数的个数。

示例1

输入:

2
68
40
6
180

输出:

2
2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 304K, 提交时间: 2023-07-15 12:01:55

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		string s;
		ll m,yu=0;
		cin>>s>>m;
		int l=s.size();
		for(int i=0;i<l;i++)
		{
			yu=((yu*10)+(s[i]-'0'))%m;
		}
		ll sum=0;
		for(int i=2;i*i<=yu;i++)
		{
			if(yu%i==0)
			{
				sum++;
				while(yu%i==0)
				{
					yu/=i;
				}
			}
		}
		if(yu>1)
		{
			sum++;
		}
		cout<<sum<<endl;
	} 
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 380K, 提交时间: 2023-06-08 16:44:35

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		string s;
		ll m,yu=0,da=0;
		cin>>s>>m;
		int l=s.size();
		for(int i=0;i<l;i++)
		{
			yu=(yu*10+s[i]-'0')%m;
		}
		for(int i=2;i*i<=yu;i++)
		{
			if(yu%i==0)
			{
				da++;
				while(yu%i==0)
				{
					yu/=i;
				}
			}
		}
		if(yu>1)
		da++;
		cout<<da<<endl;
	}
	return 0;
}

pypy3(pypy3.6.1) 解法, 执行用时: 40ms, 内存消耗: 18932K, 提交时间: 2020-10-26 16:51:15

import math
t=int(input())
while t!=0:
    t-=1
    a=int(input())
    b=int(input())
    ans=int(0)
    i=int(2)
    a%=b
    while a>=i*i:
        if a%i==0:
            #print(i)
            ans+=1;
            while(a%i==0):
                a//=i
        i+=1
    if a!=1:
        ans+=1
    print(ans)

Python3(3.5.2) 解法, 执行用时: 31ms, 内存消耗: 3424K, 提交时间: 2019-02-09 23:22:41

t = int(input())
for u in range(t):
    n = int(input())
    m = int(input())
    n %= m
    i = 2
    ans = 0
    while(i * i <= n):
        if(n % i == 0):
            ans += 1
            while(n % i == 0):n //= i
        i += 1
    if(n != 1):ans += 1
    print(ans)

上一题