列表

详情


NC50557. 樱花

描述

求不定方程:

的正整数解(x,y)的数目。

输入描述

一个整数n。

输出描述

一个整数,表示有多少对(x,y)满足题意。答案对取模。

示例1

输入:

2

输出:

3

说明:

共有三个数对(x,y)满足条件,分别是(3,6),(4,4)和(6,3)。

原站题解

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

Go 解法, 执行用时: 41ms, 内存消耗: 2288K, 提交时间: 2022-10-08 00:19:04

package main

import (
	"bufio"
	. "fmt"
	"os"
)

const N = 1e6 + 10
const P = 1e9 + 7

var cnt, n int
var st [N]bool
var primes [N]int

func get_prime(n int) {
	for i := 2; i <= n; i++ {
		if !st[i] {
			primes[cnt] = i
			cnt++
		}
		for j := 0; primes[j] <= n/i; j++ {
			st[primes[j]*i] = true
			if i%primes[j] == 0 {
				break
			}
		}
	}
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()
	Fscan(in, &n)
	get_prime(n)
	res := 1
	for i := 0; i < cnt; i++ {
		s, p := 0, primes[i]
		for j := n; j > 0; j /= p {
			s += j / p
		}
		res = res * (2*s + 1) % P
	}
	Fprintln(out, res)
}

C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 4600K, 提交时间: 2020-08-17 13:09:43

#include<cstdio>
using namespace std;
const int N = 1e6;
int p[N + 5], v[N + 5];
int main(){
	int n, mod = 1e9 + 7, i, k, ans;long long j;
	scanf("%d", &n);
	for(i = 2, ans = 1;i <= n;i++){
		if(!v[i]){
			p[++p[0]] = i;
			for(j = i, k = 0;j <= n;j *= i)k = (k + n / j) % mod;
			ans = (2ll * k + 1) * ans % mod;
		}for(j = 1;j <= p[0] && i * p[j] <= n;j++){
			v[i * p[j]] = 1;
			if(!(i % p[j]))break;
		}
	}printf("%d", ans);
	return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 25ms, 内存消耗: 8252K, 提交时间: 2022-09-27 18:29:49

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+7; 
const int mod=1e9+7;

int n,ans=1,vis[N];

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=2;i<=n;++i){
		if(!vis[i]){
			for(int j=i+i;j<=n;j+=i) vis[j]=1;
			int c=0;
			for(int j=i;j<=n;j*=i) c+=n/j;
			ans=ans*(c<<1|1)%mod;
		}
	} 
	cout<<ans<<"\n";
	return 0;
}

上一题